Hot News aus dem CAD.de-Newsletter:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  SIMULIA/ABAQUS
  Erstellen einer SIGINI Subroutine

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:   Erstellen einer SIGINI Subroutine (280 mal gelesen)
Suspa
Mitglied



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

Beiträge: 13
Registriert: 19.06.2018

erstellt am: 02. Nov. 2018 00:01    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


Quader.zip

 
Hallo zusammen,
ich möchte mir eine Subroutine schreiben um Eigenspannungen in mein Modell einzubringen. Da ich wenig Erfahrung mit dem Programmieren habe, habe ich mich die letzten Tage mit den Fortran basics auseinandergesetzt und denke, dass meine Fähigkeiten jetzt für das Verfassen der SIGINI reichen sollten.

Aus dem manual bekommt man ja ein (sehr) grobes Muster, woraus hervorgeht, dass das Programm mit einigen Variablen in die Subroutine reingeht. Um erstmal ein Verständnis für die Subroutine zu bekommen, war mein Plan, die Spannungen per Elementnummern zuzuweisen.
Für den Anfang sollen die Spannungen konstant sein. Für meine I-Träger später müsste ich wohl eine lineare Funktion einbringen. Laut verschiedenen Foren ist das mit SIGINI möglich, aber Beispiele konnte ich keine finden. Egal, so weit bin ich ja leider noch nicht.

Ich wollte erstmal mit etwas völlig banalem anfangen und einfach jedem Element (insgesamt 160) eine Spannung in 3-Richtung zuweisen.
Mein Code dafür lautet
---------------------
SUBROUTINE SIGINI(SIGMA,COORDS,NTENS,NCRDS,NOEL,NPT,LAYER,
    1 KSPT,LREBAR,NAMES)
C
      INCLUDE 'ABA_PARAM.INC'
C
      DIMENSION SIGMA(NTENS)
      CHARACTER NAMES(2)*80
REAL fy
fy=235
if(NOEL<=160  .and. NOEL>=1) then
SIGMA(3)=-0.5*fy
end if
return
end
--------------------------
Ich bekomme aber immer den Error, dass Probleme beim kompilieren aufgetreten sind. Subroutine und .inp hänge ich an. Kennt sich jemand mit Subroutinen aus und weiß, wo hier mein Fehler ist?

Hinzukommt: Die im Code genannte ‚ABA_PARAM.INC‘ gibt es bei mir nicht. Es gibt die Datei nur mit _sp oder _dp im Namen. Vermutlich single und double precision. Allerdings keine Datei ohne diese Zusätze.

Hinweise, die mich ein wenig weiterbringen, wären super! 

Danke sehr!

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

Mustaine
Ehrenmitglied V.I.P. h.c.



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

Beiträge: 3261
Registriert: 04.08.2005

Abaqus

erstellt am: 05. Nov. 2018 17:38    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 Suspa 10 Unities + Antwort hilfreich

Da sind diverse Formatierungsfehler drin, die der Compiler anmeckert.

Hier mal ein Beispiel welches funktioniert:

Code:

      SUBROUTINE SIGINI(SIGMA,COORDS,NTENS,NCRDS,NOEL,NPT,LAYER,
    1 KSPT,LREBAR,NAMES)
C
      INCLUDE 'ABA_PARAM.INC'
C
      DIMENSION SIGMA(NTENS),COORDS(NCRDS)
      CHARACTER NAMES(2)*80
C
      REAL fy
      fy=235
C
      SIGMA(1)=NOEL
      SIGMA(2)=NOEL
C      SIGMA(3)=NOEL
      SIGMA(4)=NOEL
      SIGMA(5)=NOEL
      SIGMA(6)=NOEL
C
      if(NOEL<=160 .and. NOEL>=1) then
        SIGMA(3)=-0.5*fy
      else
      SIGMA(3)=0d0
      end if
C
      RETURN
      END

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

Suspa
Mitglied



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

Beiträge: 13
Registriert: 19.06.2018

erstellt am: 05. Nov. 2018 21:51    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

Danke! Ich hatte in den .log files schon gesehen, dass es wohl an der Formatierung liegen musste und dann die Formatierung einer anderen Subroutine aus dem User Manual für meine Zwecke missbraucht, sodass mein Modell des einfachen Quaders jetzt auch läuft und im initial Step schon Spannungen herrschen.

Allerdings würde mich noch interessieren, warum du

SIGMA(1)=NOEL
      SIGMA(2)=NOEL
C      SIGMA(3)=NOEL
      SIGMA(4)=NOEL
      SIGMA(5)=NOEL
      SIGMA(6)=NOEL

im Code stehen hast? Das habe ich in meinem Code nicht und es rechnet. Geht es nur darum, die Variable Sigma() vor der if-Schleife mit einem beliebigen Wert zu belegen oder hat das noch einen weiteren Grund? Warum wurde dann Sigma(3) auskommentiert? 

Noch eine weitere Sache für Geometrien, die etwas komplexer als der Quader sind: Statt den Weg über die Elementnummern zu gehen würde ich gerne einen Weg über Koordinaten gehen. Im Array COORDS sind laut manual die Koordinaten der Integrationspunkte hinterlegt.


Mein Ziel ist es nun, die Subroutine so zu schreiben, dass ich (in Worten) sage, "Wenn die Z-Koordinate kleiner ist als 2000 .und. die y-Koordinate zwischen 20 und 15 liegt, dann weise dem Punkt die Spannung Sigma(3)=p zu." (Die Zahlen sind jetzt willkürlich. 2000 könnte die Länge des Trägers sein und der obere Rand des Flansches bei 20 und der untere bei 15 liegen). Sprich: Nur im oberen Flansch soll die angegebene Spannung herrschen.

Ich weiß nicht genau, wie der Array "COORDS" aufgebaut ist und ging davon aus, dass ich es so schreiben könnte:

if(COORDS(3).le.2000 .and. (COORDS(2).ge.(15) .and. COORDS(2).le.(20)) then

Sigma(3)=0.5fy

else

Sigma(3)=0d0
end if

und so weiter.

Leider klappt das so nicht. Vermutlich, weil ich den Array falsch verwende und COORDS(1) nicht den X-Koordinaten, COORDS(2) nicht den y-Koordinaten usw. entspricht.

Ist die COORDS-Variable überhaupt der richtige Ansatz dafür? 

Danke für die Hilfe!!!


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

Mustaine
Ehrenmitglied V.I.P. h.c.



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

Beiträge: 3261
Registriert: 04.08.2005

Abaqus

erstellt am: 06. Nov. 2018 11: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 Suspa 10 Unities + Antwort hilfreich

Diese Zeilen habe ich nur eingebaut, damit irgendein Wert in den anderen Richtungen vorgegeben wird. Sigma3 ist auskommentiert, da es später definiert wird.

Das mit den COORDS() funktioniert bei mir problemlos. Hier ein Beispiel:

Code:

      SUBROUTINE SIGINI(SIGMA,COORDS,NTENS,NCRDS,NOEL,NPT,LAYER,
    1 KSPT,LREBAR,NAMES)
C
      INCLUDE 'ABA_PARAM.INC'
C
      DIMENSION SIGMA(NTENS),COORDS(NCRDS)
      CHARACTER NAMES(2)*80
C
      Parameter(zero=0.0d0, one=1.0d0)
      REAL fy
      fy=235
C
      SIGMA(1)=one
      SIGMA(2)=one
C      SIGMA(3)=NOEL
      SIGMA(4)=one
      SIGMA(5)=one
      SIGMA(6)=one
C
      if(COORDS(3)>=25.0 .and. COORDS(1)>=10.0) then
        SIGMA(3)=-0.5*fy
      else
      SIGMA(3)=zero
      end if
C
      RETURN
      END

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

Suspa
Mitglied



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

Beiträge: 13
Registriert: 19.06.2018

erstellt am: 06. Nov. 2018 20: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

Super! Wieder vielen Dank!

Es lag wohl daran, dass ich den Part DIMENSION COORDS(NCRDS) nicht drin hatte. :-)


Jetzt sollte ich alle Werkzeuge haben, um mir eine gute Subroutine zu basteln. Danke nochmal!

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

Suspa
Mitglied



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

Beiträge: 13
Registriert: 19.06.2018

erstellt am: 13. Nov. 2018 13:23    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


EigenspannungenIPE80.zip

 
Nun läuft meine Subroutine und im initial step habe ich auch die von mir geplanten bzw. laut Literatur im geschweißten Träger vorherrschenden Eigenspannungen in 3-Richtung.

Ich habe nun - wie im Manual beschrieben - einen General static step geschaltet ohne äußere Lasten o.ä., sodass Abaqus die Initialspannungen ins Gleichgewicht bringen kann, bevor ich meine eigentlichen Stabilitätsuntersuchungen mache. Laut Manual sollen dabei Veränderungen vorgenommen werden, um die Spannungen auch mechanisch verträglich zu machen.

Ich habe meine Eigenspannungen nur in 3-Richtung aufgebracht und zumindest auf dem Papier sind diese beinahe im Gleichgewicht. Ich habe einen kleinen Rest der Größenordnung 1E-04, also wohl etwas, was von Abaqus zügig gelöst werden könnte.

Das Problem: Nach dem Gleichgewichts-Step zerschießt es mir alle Spannungen mit Unterschieden von bis zu 100MPa und von meinem ursprünglichen Verlauf ist nicht mehr viel übrig. Ich habe auf einmal Kräfte von 90 bis 100N im System, wenn ich mir diese per View-Cut und NFORC-Output anzeigen lasse.

Ich weiß nicht so wirklich weiter, wieso meine Spannungen für den solver offenbar so weit von einem Gleichgewicht entfernt sind, wo sie doch zumindest auf dem Papier in etwa im Gleichgewicht stehen.
Den initial step habe ich auf 1 gestellt (ebenso wie die Gesamt step time), sodass in einem Zeitinkrement gelöst werden sollte. Funktioniert auch alles soweit, aber das Ergebnis ist nicht zufriedenstellend.

Ich habe auch verschiedene Lagerungen ausprobiert, leider erfolglos.

Ist das Problem schonmal jemandem untergekommen oder konnte es gar jemand lösen? 


Edit: Habe auch mal eine Excel-Tabelle angehangen, die die GGW-Berechnung beinhaltet.

[Diese Nachricht wurde von Suspa am 13. Nov. 2018 editiert.]

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

Mustaine
Ehrenmitglied V.I.P. h.c.



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

Beiträge: 3261
Registriert: 04.08.2005

Abaqus

erstellt am: 13. Nov. 2018 16:42    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 Suspa 10 Unities + Antwort hilfreich

Du hast keine Lasten oder Randbedingungen auf dem Modell. Was soll also verhindern, dass sich die Spannungen durch Deformationen abbauen? Wenn du eine Feder vorspannst und dann loslässt, wird sie sich auch wieder entspannen.

Nur im Inneren von Strukturen verhindert das umgebene Material teilweise eine freie Ausdehnung, so dass Restspannungen da bleiben.

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

Suspa
Mitglied



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

Beiträge: 13
Registriert: 19.06.2018

erstellt am: 14. Nov. 2018 01:00    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

Möglicherweise war das entsprechende constraint+Lagerung in der .inp unterdrückt. Die Eigenspannungen sollen ja eigentlich keine Schnittgrößen hervorrufen und mit sich selbst im Gleichgewicht stehen, deshalb hatte ich als letztes einen Fall ohne Auflager ausprobiert. Die Lagerung im Lastfall soll wie im Eulerfall 2, unten Festlager, oben Loslager sein.

Bitte entschuldige, dass ich bei der Sache so auf dem Schlauch stehe: Deine Erläuterungen ergeben natürlich Sinn, aber ich ging davon aus, dass die Initialspannungen auch von Abaqus als solche interpretiert werden und keine weiteren Verformungen hervorrufen, da diese ja das Resultat einer vorherigen Einwirkung (welcher Art auch immer) sein sollen und mir lediglich als Ausgangspunkt der kommenden Simulation dienen sollen. Die Spannungen sollen in meinem Bauteil sein, bevor die eigentliche Last überhaupt aufgebracht wird, da sie nur durch das Schweißen der Flansche an den Steg und die unterschiedlichen Abkühlgeschwindigkeiten entstehen. Wenn ich den Träger dann nach dem Schweißen irgendwo liegen lasse, sind die Spannungen nach wie vor drin und stehen im Gleichgewicht, obwohl keine Auflast anliegt oder anderweitige Bedingungen die Verformungen verhindern. Im Falle von Stützen würden sich bereits vorherrschende Druckspannungen dann mit den Druckspannungen durch Auflast addieren und die Traglast reduzieren, da mein Bauteil durch die Eigenspannungen vorbelastet ist. Sozusagen sollen die Spannungen das sein, was übrig bleibt, wenn das Bauteil Spannungen infolge schweißen fertig umgelagert hat. Offenbar habe ich das falsch verstanden, frage mich aber dann umso mehr, wie das korrekte Vorgehen wäre, um sowas zu realisieren.

Das Manual sagt zu den Eigenspannungen folgendes:


Code:
When initial stresses are given in Abaqus/Standard (including prestressing in reinforced concrete or interpolation of an old solution onto a new mesh), the initial stress state may not be an exact equilibrium state for the finite element model. Therefore, an initial step should be included to allow Abaqus/Standard to check for equilibrium and iterate, if necessary, to achieve equilibrium.

To achieve equilibrium for all other analyses, a first step using the static procedure (“Static stress analysis,” Section 6.2.2) should be used. It is recommended that you specify the initial time increment to be equal to the total time specified in this step so that Abaqus/Standard will attempt to find equilibrium in one increment. By default, Abaqus/Standard ramps down the unbalanced stress over the first step. This allows Abaqus/Standard to use automatic incrementation if equilibrium cannot be found in one increment.


Für mich las sich das so, als müsste ich einen Step ohne Auflast machen, der nichts weiter als die Eigenspannungen beinhaltet, damit Abaqus einen Gleichgewichtszustand finden kann, der aber in etwa dem Spannungszustand im initial step entspricht. Das sollen ja die Spannungen im unbelasteten und unverformten Bauteil sein.

Ich frage mich, ob dann die SIGINI überhaupt der richtige Ansatz ist. Kann man das irgendwie anders sinnvoll bewerkstelligen? 
Ist das überhaupt möglich ohne gar den Schweißprozess vorher zu simulieren?

Vielen Dank, dass du dich meiner Fragen bisher so angenommen hast. Ich weiß es wirklich sehr zu schätzen und kann mir vorstellen, dass das auf Dauer sehr anstrengend ist. Aber es ist nicht einfach Hilfe in FEM zu bekommen. 



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

Mustaine
Ehrenmitglied V.I.P. h.c.



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

Beiträge: 3261
Registriert: 04.08.2005

Abaqus

erstellt am: 15. Nov. 2018 11:03    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 Suspa 10 Unities + Antwort hilfreich

Dein Bauteil ist mit den Restspannungen ohne die Deformationshistorie nicht im Gleichgewicht. Das kann man an dem aktuellen Vorgang sehen. Beim abkühlen passiert mehr als nur das Verbleiben von Restspannungen.

Du kannst ja mal alle äußeren Knoten einspannen und dann die Reaktionskräfte anschauen. Wenn du dein Bauteil in einen künstlichen Gleichgewichtszustand ohne weitere Verformungen setzen möchtest, müsstest du die Reaktionskräfte als Knotenkräfte aufbringen.

Erstmal stellt sich aber die Frage, ob es nicht bessere Möglichkeiten gibt. Kannst du das abkühlen ggf. in Abaqus im 1. Step rechnen? Oder wurde das Abkühlen vorher auch in Abaqus gerechnet, so dass man eine Import-Analyse machen könnte?

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

Suspa
Mitglied



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

Beiträge: 13
Registriert: 19.06.2018

erstellt am: 26. Nov. 2018 21:06    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

Habe mich erst ein wenig gesträubt, den Schweißprozess auch in Abaqus zu rechnen, da ich sowas noch nie gemacht habe. Habe mich aber jetzt doch mal damit befasst und bin eigentlich ganz zufrieden mit meinem Ergebnis. Die Spannungen passen auf den ersten Blick sehr gut und ich denke, dass ich nun damit weiterarbeiten werde.

Vielen Dank für die Hilfe Mustaine! 

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