Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  SIMULIA/ABAQUS
  Umat - konvergiert nicht

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:   Umat - konvergiert nicht (1253 mal gelesen)
  
Die Gewinne der Zukunft werden mit intelligenten, autonomen Elektrofahrzeugen eingefahren. (3DEXPERIENCE)
carsten1983
Mitglied
Doktorand


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

Beiträge: 125
Registriert: 11.10.2007

erstellt am: 19. Mrz. 2009 11:08    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


Testen_von_umat.txt


uumatt_naked.txt

 
Hallo zusammen,

ich habe eine Umat (linear elastisch, orthotrop) zum Testen zusammengeschrieben, doch die Tests dazu laufen mal wieder sehr enttäuschend.
Ich habe das Problem, das Abaqus immer mit Konvergenzproblemen abbricht. Vorher wird moniert, dass die Systemmatrix negative Eigenwerte hat.

Ich weiß nicht so recht was das Problem ist..
Ich habe die aufgestellte Elastizitätsmatrix dahingehend untersucht, dass sie positiv definit und symmetrisch ist. Beides ist erfüllt, das legt den Verdacht nahe, dass das Spannungsupdate nicht richtig ist (Nur weiß ich nicht wie es anders sein sollte), oder dass vom FE-Modell her etwas falsch ist.

Edit: Upload ging nicht

Wenn sich jemand beides mal anschauen könnte und mir einen Hinweis geben könnte, wäre ich sehr dankbar.


[Diese Nachricht wurde von carsten1983 am 19. Mrz. 2009 editiert.]

[Diese Nachricht wurde von carsten1983 am 19. Mrz. 2009 editiert.]

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: 23. Mrz. 2009 12:02    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 carsten1983 10 Unities + Antwort hilfreich

Hallo Carsten,

ich habe nicht arg sorgfälltig über deine Routine geschaut, aber es ist mir trotzdem etwas aufgefallen:

In deinem Hauptprogramm verwendest du "aba_param.inc" und in den Unterprogrammen nicht. Ich empfehle dir das "aba_param.inc" garnicht zu verwenden, sondern die Variablen alle zu deklarieren (implicit none). Dadurch hast du mehr kontrolle über eventuelle Tippfehler und ähnliches.
Vielleicht entdeckst du so einen Fehler.

MfG
Viktor

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: 25. Mrz. 2009 12:47    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 carsten1983 10 Unities + Antwort hilfreich

Hi Carsten,

leider finde ich die exakte Stelle im Manual gerade nicht, aber ich meine gelesen zu haben, dass im Manual empfohlen wird, eigene Routinennamen mit einem "K" beginnen zu lassen, um Konflikte zu vermeiden.
Meine Routine "KJacobi" wird ueber: call KJacobi(...) aufgerufen. Weiterhin empfiehlt ABAQUS auch fuer die eigenen Routinen die Zeile INCLUDE 'aba_param.inc' einzubinden.
Klar kann man alle Variablen selbst definieren, aber es besteht die Moeglichkeit, dass manche fuer die Loesung wichtigen Variablen verwendet werden muessen und ohne die Zeile nicht gefunden werden koennen.

Ist jetzt zwar nur eine Vermutung, aber ausprobieren kannst du es ja mal.

Halte uns bitte ueber deine Fortschritte und weitere Probleme auf dem Laufenden. Ich bin mir sicher, dass der ein oder andere in naher Zukunft was mit UMAT anstellen wird und dann bestimmt auch vor aehnlichen Problemen steht.

Viel Erfolg vorerst!!!

Grueße
Nicksen

------------------
==========
==  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: 25. Mrz. 2009 13:52    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 carsten1983 10 Unities + Antwort hilfreich

Hallo zusammen,

Nicksen hat Recht, was die Definition mit dem "K" betrifft. Daraus ergeben sich für mich auch die Probleme, die man hat, wenn man "aba_param.inc" verwendet:
Wenn eine function mit KYield oder ähnliches definiert wird, kann es passieren, dass das Resultat als integer interpretiert wird, da mit "aba_param.inc" alle Variablen, die mit i,j,k,l,n,m beginnen automatisch integer sind. Da muss man dann höllisch aufpassen, was in Carstens Fall auch mit ein Grund sein könnte, warum die Umat nicht konvergiert.

MfG
Viktor

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

carsten1983
Mitglied
Doktorand


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

Beiträge: 125
Registriert: 11.10.2007

erstellt am: 26. Mrz. 2009 08:15    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


uumatt_naked.txt

 
Hallo an alle Interessierten,

die Aba_param.inc habe ich in der Umat drin, jedoch nicht in allen Unteroutinen. Wenn ich das tue, dann meckert Abaqus. Jedenfalls habe ich den starken Verdacht, dass ähnlich wie es schon vermutet wurde, tatsächlich ein Typenkonlikt vorlag (wie eigentlich immer, wenn etwas offensichtliches in Fortran nicht geht..).
Ich habe eigentlich nur das Interface der Umat nochmal 1 zu 1 aus der Hilfe kopiert. Was soviel bedeutet wie, ich weise den Argumenten von Umat nicht erneut einen Typ zu, sondern dimensioniere lediglich.

Ein Wehrmutstropfen bleibt dennoch:

Die Zeile, wo getDDSDDE aufgerufen wird muss eine Variable x statt direkt DDSDDE rausschreiben:

      call GetDDSDDE (eigenwert1,eigenwert2,eigenwert3,A11,A22,A33,
    1    A44,A55,A66,E1_UD,E2_UD,G12_UD,Nue12_UD,Nue23_UD,
    2    Nue21_UD,Delta,x)
      DDSDDE=x
das geht..

Das geht nicht: 
      call GetDDSDDE (eigenwert1,eigenwert2,eigenwert3,A11,A22,A33,
    1    A44,A55,A66,E1_UD,E2_UD,G12_UD,Nue12_UD,Nue23_UD,
    2    Nue21_UD,Delta,DDSDDE)

     
Hier bricht Abaqus den job ab und konvergiert nicht.

Auch hier kann eigentlich nur ein Typenkonflikt vorliegen, den ich bislang nicht verstanden habe..

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. Mrz. 2009 11:10    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 carsten1983 10 Unities + Antwort hilfreich

Hallo Carsten,

warum das nicht funktioniert, kann ich dir nicht sagen. Rein theoretisch sollte es schon gehen. Ein häufige Fehlerquelle ist auch, dass in Fortran die an eine Subroutine übergebenen Parameter auch gleichzeitig Rückgabewerte sein können, d.h. wenn du in der Subroutine einer "Eingabevariablen" einen neuen Wert zuweist, dann ändert es auch den Wert im Hauptprogramm. Das wusstest du sicherlich schon und es verstärkt die Vermutung, dass etwas anderes an deinem Programm nicht stimmt.

Was ich entdeckt habe ist:

Code:
      DDSDDE=ZERO
      DO 20 K1=1,NTENS
        DO 10 K2=1,NTENS
          DDSDDE(K2,K1)=0.D0
10    CONTINUE
20  CONTINUE

Du verwendest dies in der Unterroutine "GetDDSDDE". Generell reicht die erste Zeile schon aus um dem Feld an jeder Stelle die 0.d0 zu zuweisen. Zudem ist das NTENS in der Unterroutine nicht definiert und wird auch nicht übergeben.

Außerdem ist mir noch aufgefallen, dass du Variablen wie

Code:
Nue_m,Nue_f,Nue12_UD,Nue21_UD,Nue23_UD

in dem Hauptprogramm als real definierst. Da bin ich mir nicht ganz sicher, ob das so geht und ob die dann nicht doch integer sind. Warum rechnest du nicht mit double precision?

Noch eine Frage: wenn Abaqus abbricht, bringt es eine Fehlermeldung?

MfG
Viktor

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

carsten1983
Mitglied
Doktorand


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

Beiträge: 125
Registriert: 11.10.2007

erstellt am: 27. Mrz. 2009 12:10    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

Wie gesagt in der geposteten Version geht die Routine. Mit der NTENS Geschichte, haste du natürlich recht. Normalerweise, reicht ja auch die Definition mit : DDSDDE=Zero, wenn Zero definiert ist. Die Schleife hatte ich übersehen, das kommt noch aus nem Test.

So wie es aussieht hast du mit dieser Schleife und dem fehlenden NTENS tatsächlich das Problem gefunden. Ich habe die Schleife, die eh sinnlos da rum steht entfernt und es geht ohne diesen Mist mit dem x. 

Zur Prezision: Um ehrlich zu sein, weiß ich nicht ob Abaqus in Standard mit double rechnet   Ich weiß nur, dass wenn ich die Variablen als double (real*8) deklariere nichts mehr geht.

Ich danke dir für dir Hilfe!


[Diese Nachricht wurde von carsten1983 am 27. Mrz. 2009 editiert.]

[Diese Nachricht wurde von carsten1983 am 27. Mrz. 2009 editiert.]

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. Mrz. 2009 14:16    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 carsten1983 10 Unities + Antwort hilfreich

Deklariere sie doch einfach mit:

Code:
DOUBLE PRECISION :: HUND, KATZE, MAUS

Du wirst deine Routine ja sicherlich auch an Hand eines Einelements testen? Wieviel total iterations braucht Abaqus?
Bei meiner einfachen UMAT braucht Abaqus in den ersten Schritten 13 Iterationen, bei der Hälfte der Rechnung etwa 5-8 und zum Ende hin fast immer 7.

Ich habe leider gar keine Erfahrung, ob das ok ist oder nicht. Wie sieht es bei dir aus?
Und da dies Thema um Konvergenz geht, ist folgende Frage auch angebracht: wird die Gleichgewichtskonvergenz hauptsächlich von der Tangente (DDSDDE) beeinflusst, oder gibt es noch weitere Einflussgrößen?

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)2020 CAD.de | Impressum | Datenschutz