Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  SIMULIA/ABAQUS
  Solution Dependent Variables (SDVs in UMAT) sofort speichern

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:  Solution Dependent Variables (SDVs in UMAT) sofort speichern (1855 / mal gelesen)
DrReinerKlimpke
Mitglied



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

Beiträge: 143
Registriert: 09.11.2012

erstellt am: 09. Jan. 2019 14:20    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 zusammen,

kennt jemand von euch eine Möglichkeit Informationen für einen Materialpunkt im Rahmen einer UMAT im Sinne einer Solution Dependent Variable (SDV, STATEV) zu speichern, ohne dabei bis zur Konvergenz des Inkrements warten zu müssen?

SDVs werden in einer Iteration ja immer mit ihrem Wert aus dem vorherigen (konvergierten) Inkrement initialisiert. Ich möchte, dass die SDV auch vor Erreichen der Konvergenz (Ende des Inkrements) einen gegebenen Wert annimmt und behält.

Kennt jemand von euch eine Möglichkeit dies umzusetzen? Aktuell werden die entsprechenden Informationen in einem Array mittels SAVE-Befehl gespeichert. Dies macht mir jedoch eine Probleme sobald die Rechnung parallelisiert (mehrere CPUs) laufen soll. Daher würde ich gerne eine Speichermöglichkeit der Werte ähnlich einer SDV finden.

Freue mich über eure Tipps und Hinweise.

Grüße,
CG

[Diese Nachricht wurde von DrReinerKlimpke am 12. Jan. 2019 editiert.]

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

Mefh
Mitglied



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

Beiträge: 45
Registriert: 04.03.2015

erstellt am: 10. Jan. 2019 07: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 DrReinerKlimpke 10 Unities + Antwort hilfreich

Meines Wissens nach wird immer die state variablen SDV des letzten erfolgreichen frames verwendet.

Aber es gibt die Möglichkeit beliebig arrays zu definieren. Dabei werden auch parallele Prozesse betrachtet:
Dokumentation: Abaqus User Subroutines Reference Guide; Kapitel 2.1.23 (Abaqus 2016)
http://ivt-abaqusdoc.ivt.ntnu.no:2080/v2016/books/sub/default.htm?startat=ch02s01abu23.html

Hilft das?

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

DrReinerKlimpke
Mitglied



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

Beiträge: 143
Registriert: 09.11.2012

erstellt am: 10. Jan. 2019 08:13    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,

zunächst vielen Dank für deinen Hinweis. Über dieses Kapitel der ABAQUS Dokumentation bin ich auch schon gestolpert, bin aber leider aus den Anweisungen nicht so wirklich schlau geworden.

Hast du zufällig ein entsprechendes Beispiel hierzu parat?

Ansonsten habe ich es jetzt erstmal wieder mit klassischen SDVs versucht. Hierbei leidet die Konvergenz zwar etwas aber evtl. geht es zur Not auch so. Trotzdem würde mich interessieren, ob es eine Speichermöglichkeit entsprechend der eingangs erwähnten Charakteristik (Speichern am Materialpunkt unabhängig von Konvergenz) gibt.

Viele Grüße,
CG

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

Mefh
Mitglied



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

Beiträge: 45
Registriert: 04.03.2015

erstellt am: 10. Jan. 2019 08:54    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 DrReinerKlimpke 10 Unities + Antwort hilfreich

Ich hatte mal ein ähnliches Problem. Dieses habe ich dann aber anders gelöst.

Ich habe Dir mal ein (ungetestetes) Beispiel zusammengehackt

#include <SMAAspUserSubroutines.hdr>

      SUBROUTINE UMAT(STRESS,STATEV,DDSDDE,SSE,SPD,SCD, RPL,DDSDDT,DRPLDE,DRPLDT,              &
            STRAN,DSTRAN,TIME,DTIME,TEMP,DTEMP,PREDEF,DPREDEF,CMNAME,                          &
            NDI,NSHR,NTENS,NSTATEV,PROPS,NPROPS,COORDS,DROT,PNEWDT,                            &
            CELENT,DFGRD0,DFGRD1,NOEL,NPT,LAYER,KSPT,KSTEP,KINC)

          integer ai(2)
          pointer(ptra,ai)
          integer id
           
! Bsp für C3D8 - Element; id für jeden Integrationspunkt
            id = NOEL * 8 + NPT
         
! Hier integer-werte; für float-Werte SMALocalFloatArrayCreate verwenden (und ai entsprechend definieren)
            ptra = SMAIntArrayAccess(id)
           
! ptra = 0, wenn array für id nicht existiert: Kreiere ein array mit Größe 2
            if (ptra .EQ. 0 )  ptra = SMAIntArrayCreate( id, 2)
           
! Werte auslesen
            SDV(1) = ai(1)
            SDV(2) = ai(2)
         
! Werteübetrag
            ai(1) = SDV(1)
            ai(2) = SDV(2)

      RETURN
      END
           

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

DrReinerKlimpke
Mitglied



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

Beiträge: 143
Registriert: 09.11.2012

erstellt am: 12. Jan. 2019 07:41    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 Mefh,

vielen Dank für dein kleines Beispiel.
Ich habe bei der Umsetzung aktuell folgendes Problem: Wenn ich Versuche das lokale Array via ptra = SMALocalIntArrayAccess(ID) zu öffnen erhalte ich eine Fehlermeldung, die sinngemäß wohl sowas sagt wie, dass es dieses Array derzeit noch nicht gibt.

Wenn ich den Befehl ptra = SMALocalIntArrayCreate(ID,2) vor dem Befehl ptra = SMALocalIntArrayAccess(ID) positioniere erscheint die oben beschriebene Fehlermeldung nicht.

Habe ich an dieser Stelle etwas falsch gemacht, oder wie ist dies in deinem Beispiel gemeint? Könntest du mir hier evtl. nochmal weiterhelfen?

Ansonsten wie gesagt vielen Dank bis hierhin für deine Hilfe!
Grüße,
CG

PS: Des weiteren bekomme eine Fehlermeldung, wenn ich den Befehl #include <SMAAspUserSubroutines.hdr> außerhalb meiner UMAT-Subroutine definiere (siehe dein Beispiel). Ich habe den Ausdruck nun innerhalb der UMAT, genauer gesagt (fast) direkt unterhalb des Subroutine-Headers platziert:
 
    SUBROUTINE UMAT(STRESS,STATEV,DDSDDE,SSE,SPD,SCD,
    1 RPL,DDSDDT,DRPLDE,DRPLDT,
    2 STRAN,DSTRAN,TIME,DTIME,TEMP,DTEMP,PREDEF,DPRED,CMNAME,
    3 NDI,NSHR,NTENS,NSTATV,PROPS,NPROPS,COORDS,DROT,PNEWDT,
    4 CELENT,DFGRD0,DFGRD1,NOEL,NPT,LAYER,KSPT,KSTEP,KINC)
C
      IMPLICIT DOUBLE PRECISION(A-H,O-Z) 
#include <SMAAspUserSubroutines.hdr>
      INTEGER AI(2)
      POINTER(PTRA,AI)
      INTEGER ID
C
      CHARACTER*80 CMNAME

... usw. ...

Ist dies so richtig?

[Diese Nachricht wurde von DrReinerKlimpke am 12. Jan. 2019 editiert.]

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

DrReinerKlimpke
Mitglied



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

Beiträge: 143
Registriert: 09.11.2012

erstellt am: 12. Jan. 2019 13:58    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 zusammen,

ich bin es nochmal. Ich denke ich habe meine eingangs beschriebene Problemstellung lösen können. Kern der aktuellen Lösung sind die von Mefh beschriebenen globalen Arrays gewesen.

Die lokalen Arrays haben in meinem Fall nicht die schlussendliche Lösung des Problems dargestellt, da hier im Fall von multipler CPU Nutzung bereits geschriebene Daten beim Wechsel des Threads verloren gegangen sind. Dieses Problem kann durch die Nutzung von globalen Arrays umgangen werden. Wie auch in der ABAQUS Dokumentation beschrieben, bleiben im Fall der globalen Arrays einmal geschriebene Daten auch bei einem Wechsel des Threads während der Iteration für den betreffenden Materialpunkt (Integrationspunkt) erhalten.

Falls jemand am Quellcode interessiert ist bitte Bescheid geben, dann kann ich an dieser Stelle einige Auszüge zum Besten geben. 

Grüße und vielen Dank für eure Hilfe,
CG

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

RenhaoWu
Mitglied


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

Beiträge: 1
Registriert: 24.08.2021

erstellt am: 24. Aug. 2021 16: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 Nur für DrReinerKlimpke 10 Unities + Antwort hilfreich

I would like to ask a question about the definition and reference of global variables.

I used SMAAspUserSubroutines to define global variables. The ptra = SMAIntArrayCreate(1,9,0) function was created in the UHARD subroutine to store the stress values of the 9 nodes. I want to use pstr = SMAIntArrayaccess(1) in UINTER. Read, but always compile failure and report an error. I found the same situation on the Internet: https://stackoverflow.com/questions/41043388/abaqus-6-14-2-vumat-vexternaldb-error-code-1073741819-with-allocatable-arrays
Is there anything special about the access here? 

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