| | | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Ansys |
Autor
|
Thema: Laststeigerung bis zum Versagen - kann .rst Datei nicht öffnen (4616 mal gelesen)
|
Arno07 Mitglied
Beiträge: 57 Registriert: 02.12.2008
|
erstellt am: 28. Apr. 2009 17:50 <-- editieren / zitieren --> Unities abgeben:
Hallo, ich habe folgendes Problem: Eine Scheibe in der ein Bolzen steckt soll mit einer Flächenlast belastet werden. Diese soll solange gesteigert werden, bis eine bestimmte (Grenz-)Spannung erreicht wird bei der die Scheibe versagt. Die Abmessungen der Scheibe können zu Beginn per Eingabeaufforderung vom Benutzer bestimmt werden und auch die Elementeinteilung ist variabel. Der Bolzen ist doppelt so lang wie die Scheibe dick ist. Nun habe ich eine DO-Schleife geschrieben mit der ich die Last, ausgehend von einem Startwert, in jedem Schleifendurchgang erhöhe bis die Grenzspannung erreicht ist. Zur Zeit sieht das so aus: Code:
/SOLUANTYPE, STATIC SOLCONTROL, ON, ON NROPT, UNSYM NLGEOM, ON !---<Lagerung an den Aussenkanten des Bolzens>--- KSEL, S, LOC, Z, -Dicke_Scheibe/2 KSEL, A, LOC, Z, 1.5*Dicke_Scheibe DK, ALL, ALL, 0 ALLSEL DTRAN !-----<Lastaufbringung>------------------------- *DO, i, 1, 100 ALast=1000 ! Vorgabe einer Startlast zul_sigma=100 NSEL, S, LOC, X, Scheibenlaenge ! Auswählen und zählen aller Knoten *GET, NANZAHL, NODE, , COUNT ALLSEL
! Aufteilen der Startlast auf die Knoten: Last=i*Scheibenbreite*Scheibendicke*ALast/NANZAHL ! Aufbringen der Last in X-Richtung: NSEL, S, LOC, X, Scheibenlaenge CM, Lasta, NODE ALLSEL F, Lasta, FX, Last !Auswählen der Flächen und der zugehörigen Knoten die der Scheibe zugeordnet sind:
ASEL, S, AREA, 1, Scheiben_Flaechenzahl, 1 NSLA, S, 1 !Sortieren der Spannungswerte und "herausholen" der maximalen Spannung: NSORT, S, 1 /POST1 SET, LAST *GET, SMAX, SORT, MAX *IF, SMAX, GE, zul_sigma, EXIT /SOLU ANTYPE, , REST *ENDDO
Nun erhalte ich folgende Fehlermeldung: An error occurred while attempting to open the results file BolzenPlatte.rstund das Programm bricht ab. Offenbar kann das Programm die Schleife nicht weiter durchlaufen, weil sie an das Ergebnis (im result file) nicht dran kommt. Aber wie mache ich dem Programm diese Datei zugänglich? In der Hilfe habe ich bislang nichts finden können. Und noch eine zweite Frage: Die Schleife wird bzw. würde aktuell maximal 100 mal durchlaufen. Wenn nun aber meine Scheibe bzw. die Knotenanzahl auf die meine Anfangslast aufgeteilt ist so hoch ist, dass 100 Durchläufe nicht reichen, was dann? Oder anders formuliert: Gibt es eine Möglichkeit sicherzustellen, dass die Schleife auf jeden Fall oft genug durchlaufen wird? Für Ratschläge/Hinweise bin ich überaus dankbar
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
arnd13 Mitglied Dipl. Ing.
Beiträge: 735 Registriert: 05.11.2008
|
erstellt am: 29. Apr. 2009 09:06 <-- editieren / zitieren --> Unities abgeben: Nur für Arno07
Hi, 1) Sehe auf den ersten Blick nur, dass Du den Befehl nsort vor dem Wechsel in den /post1 und dem Einlesen des .rst (set,last) ausführst. Das wird nicht funktionieren. 2) "Gibt es eine Möglichkeit sicherzustellen, dass die Schleife auf jeden Fall oft genug durchlaufen wird?" Versuche es mal mit einer bedingten Schleife: *dowhile (siehe Hilfe). Gruß, A. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
ChristophN Mitglied Berechnungsingenieur
Beiträge: 773 Registriert: 13.12.2008
|
erstellt am: 29. Apr. 2009 09:32 <-- editieren / zitieren --> Unities abgeben: Nur für Arno07
|
Arno07 Mitglied
Beiträge: 57 Registriert: 02.12.2008
|
erstellt am: 29. Apr. 2009 12:42 <-- editieren / zitieren --> Unities abgeben:
Vielen Dank für die Hinweise. Sie haben mich aber bisher nur bedingt weitergebracht. Trotzdem vielen Dank Ich zunächst versuchsweise den /POST1 vor dem NSORT Befehl und SOLVE am Ende vor *ENDDO platziert. Ergebnis war das ich die Fehlermeldung immer noch bekommen habe, allerdings vorher noch die beiden Warnmedlungen *** WARNING *** CP = 15.102 TIME= 11:24:01 For item= AREA the component ( 1 ) is invalid. The ASEL command is ignored. *** WARNING *** CP = 15.202 TIME= 11:24:01 The requested S data is not available. The NSOR command is ignored. Danach habe ich den SOLVE Befehl vor den /POST1 Befehl gesetzt und das sah für einige Zeit (ca. 40 Minuten ) ganz gut aus, da ANSYS anfing zu rechnen. Dann gab es aber einen Abbruch der, wenn ich das richtig interpretiere auf zu wenig Speicher zurückzuführen ist
Not enough memory for Sparse Matrix solver. Increase memory using -m option (refer to the Basic Analysis Procedures Guide, Ch. 19). Memory available= 233 MB; memory required for solution= 309 MB. *** WARNING *** CP = 1020.217 TIME= 12:01:03 For item= AREA the component ( 1 ) is invalid. The ASEL command is ignored. *** WARNING *** CP = 1020.457 TIME= 12:01:07 The requested S data is not available. The NSOR command is ignored. *** ERROR *** CP = 1020.568 TIME= 12:01:07 An error occurred while attempting to open the results file BolzenPlatte.rst. Ich werde also mal im Kapitel 19 nachlesen, wie das Speicherproblem in den Griff zu bekommen ist. Abgesehen davon irritieren mich die beiden Warnmeldungen bzgl. des ASEL und NSORT Befehls aber schon. Ich lasse mir vorher im Programm die höchste Nummer der Scheibenflächen mit *GET, Scheiben_Flaechenzahl, AREA, , NUM, MAX herausholen um dann mit den Nummern der Bolzenflächen bei Scheiben_Flaechenzahl+1 zu beginnen.
[Diese Nachricht wurde von Arno07 am 29. Apr. 2009 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
arnd13 Mitglied Dipl. Ing.
Beiträge: 735 Registriert: 05.11.2008
|
erstellt am: 29. Apr. 2009 13:04 <-- editieren / zitieren --> Unities abgeben: Nur für Arno07
1) Bitte die Hilfe genau lesen: Hilfe: ASEL, Type, Item, Comp, VMIN, VMAX, VINC, KSWP => asel,s,area,,1! Dann ist auch die Warnung verschwunden. 2) Vor nsor noch den lastfall einlesen set,... 3) Wenn Du prüfen willst, ob ein resultfile vorhanden ist: Entweder im Arbeitsverzeichnis nachsehen und Größe der Datei kontrollieren, oder set,list eingeben. 4) Noch ein Tip: Das Ganze zuerst an einem kleinen Testmodell rechnen, um Absturz wegen Speicherproblemen zu vermeiden. Und 40min Wartezeit wegen einer Rechnung sind auch nicht gerade effektiv. Gruß, E. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Arno07 Mitglied
Beiträge: 57 Registriert: 02.12.2008
|
erstellt am: 29. Apr. 2009 22:52 <-- editieren / zitieren --> Unities abgeben:
Ich habe jetzt die Hilfe zum Thema Speicher gelesen und versucht den Speicher manuell zu ändern - die Fehlermeldung bleibt aber bestehen. Zu meinem Vorgehen: Ich habe im Produkt Launcher unter "Anpassungen/Voreinstellungen" die Option Benutzerdefinierte-Arbeitsspeicher Einstellungen verwenden angeklickt und als Einstellungen die Varianten: - Gesamter Arbeitsplatz 1000MB - Datenbasis 200MB - Gesamter Arbeitsplatz 1000MB - Datenbasis 500MB - Gesamter Arbeitsplatz 1400MB - Datenbasis 400MB ausprobiert. Außerdem habe ich im Feld "Weitere Parameter" -m 1000 -db 200 usw. eingegeben bzw. das Feld freigelassen. Das ganze dann als Profil1 gespeichert (als Standartprofil festgelegt) und die Berechnung neu gestartet. Jedes Mal kam die Fehlermeldung - immer mit den gleichen Zahlen *** ERROR *** CP = 1029.090 TIME= 21:36:21 Not enough memory for Sparse Matrix solver. Increase memory using -m option (refer to the Basic Analysis Procedures Guide, Ch. 19). Memory available= 233 MB; memory required for solution= 309 MB. Im Output Fenster bekomme ich noch die Meldung: SPARSE MATRIX DIRECT SOLVER. Number of equations = 293021, Maximum wavefront = 6858 Memory available for solver = 233.346 MB Memory required for in-core = 8033.697 MB Optimal memory required for out-of core = 755.272 MB Minimum memory required for out-of core = 308.723 MB ***NOTE*** Sparse Direct Solver is using the least out-of-core memory. For better CPU performance increase memory by using -m option (refer to the Basic Analysis Procedures Guide, Ch. 19) Im Kapitel 19.3.2 Changing the Amount of ANSYS Work Space steht dann folgendes: The easiest way to do this is to use the work space entry option (-m) while activating the program, either via the ANSYS launcher or via the ANSYS execution command. Genau das habe ich doch gemacht - meine ich jedenfalls. Nur anscheinend akzeptiert ANSYS meine Änderungen nicht. Warum? Ich habe ANSYS 11 unter WinXP laufen, 1GB Arbeitsspeicher und 30GB Platz auf der Platte bzw. Partition und so sehr groß ist mein Modell auch nicht... [Diese Nachricht wurde von Arno07 am 29. Apr. 2009 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
ChristophN Mitglied Berechnungsingenieur
Beiträge: 773 Registriert: 13.12.2008
|
erstellt am: 29. Apr. 2009 23:52 <-- editieren / zitieren --> Unities abgeben: Nur für Arno07
Zitat: Original erstellt von Arno07: und so sehr groß ist mein Modell auch nicht...
Fast 300000 Gleichungen sind schon nicht ohne... Also "zu klein" für einen 1GB-Rechner ist dein Modell definitiv nicht! Wenn du Speicherprobleme hast, hilft meist der PCG oder irgendein anderer iterativer Solver, die brauchen weniger. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
PatrickL. Mitglied Student
Beiträge: 42 Registriert: 22.02.2009
|
erstellt am: 30. Apr. 2009 19:10 <-- editieren / zitieren --> Unities abgeben: Nur für Arno07
hey, ich habe eine ähnliches problem: ich habe mein modell modeliert und führe eine plastische berechnung aus. nach 3 stunden (ist ein recht grosses modell ansys kriegt auch die rechnung gelöst, ich kann mir die steps und die lösung auch ansehen. jedoch wenn ich das programm schliesse und wieder öffnen kann ich das modell ein leses jedoch kene results mehr. was nach stundenlanger berechnung ärgerlich ist. die meldung ist die gleiche: "an error occured while attempting to open the results file FILENAME.rst." was kann ich da tun...danke Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
PatrickL. Mitglied Student
Beiträge: 42 Registriert: 22.02.2009
|
erstellt am: 01. Mai. 2009 22:19 <-- editieren / zitieren --> Unities abgeben: Nur für Arno07
|
Achim007 Mitglied Dipl. Ing. (FH)
Beiträge: 734 Registriert: 23.09.2008 Workbench 2.0 ANSYS15.0 Mechanical DesignModeler
|
erstellt am: 01. Mai. 2009 22:53 <-- editieren / zitieren --> Unities abgeben: Nur für Arno07
wenn Du die Datenbasis mit dem RESUME eingelesten hast musst Du die Ergebnisse (gewünschten Load Step) im /POST1 mit dem SET Befehl einlesen. (z. B. set,last) Sollte Deine *.rst Datei nicht gefunden werden, musst Du diese über das Menue General Post / Data and Filemanagement oder so ähnlich auf Deiner Festplatte suchen und einlesen. Gewünschten Load Step mit SET einlesen. Dann sollte es funktionieren. Wenn dies nicht funtioniert würde ich die Größe der *.rst anschauen. ------------------ Viele Grüße Achim Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Arno07 Mitglied
Beiträge: 57 Registriert: 02.12.2008
|
erstellt am: 20. Mai. 2009 15:34 <-- editieren / zitieren --> Unities abgeben:
Ich hole das Thema nochmal hervor. Ich habe zwischenzeitlich das Problem mit der rst.-Datei gelöst und dank Anwendung des PCG Solvers lief die Rechnung mit der obigen DO-Schleife auch durch. Nun versuche ich aber noch, wie im ersten Beitrag schon angesprochen, eine Schleife zu schreiben, die auf jeden Fall oft genug durchlaufen wird. Dies soll, wie mittels einer DOWHILE Schleife realisiert werden und sieht derzeit wie folgt aus: Code:
/SOLUANTYPE, STATIC NROPT, FULL SOLCONTROL, ON, ON NLGEOM, ON EQSLV, PCG, , 3 !---<Lagerung an den Aussenkanten des Bolzens>---
KSEL, S, LOC, Z, -Dicke_Scheibe/2 KSEL, A, LOC, Z, 1.5*Dicke_Scheibe DK, ALL, ALL, 0 ALLSEL DTRAN !-----<Lastaufbringung>------------------------- ALast=1000 ! Vorgabe einer Startlast zul_sigma=100 NSEL, S, LOC, X, Scheibenlaenge ! Auswählen und zählen aller Knoten *GET, NANZAHL, NODE, , COUNT ALLSEL ! Aufteilen der Startlast auf die Knoten: Last=Scheibenbreite*Scheibendicke*ALast/NANZAHL ! Aufbringen der Last in X-Richtung: NSEL, S, LOC, X, Scheibenlaenge CM, Lasta, NODE ALLSEL F, Lasta, FX, Last /PBC, ALL, , 1 NSUBST, 5, 50, 5 SOLVE !-------------Definition von Parametern für die DOWHILE Schleife und Par=1 Genau=1/1000 Genau=Genau*Genau *DOWHILE, Par
/POST1 !Auswählen der Flächen und der zugehörigen Knoten die der Scheibe zugeordnet sind: ASEL, S, AREA, ,1, Scheiben_Flaechenzahl, 1 NSLA, S, 1 !Sortieren der Spannungswerte und "herausholen" der maximalen Spannung: SET, LAST NSORT, S, 1 SET, LAST *GET, SMAX, SORT, , MAX ALLSEL /SOLU ! Berechnen des Verhältnisses der größten Spannung zur zulässigen Spannung ! Die im ersten bzw. aktuellen Durchlauf aufgebrachte Last pro Knoten wird als ! Last_alt gesetzt Last wird neu berechnet zu Last/KFaktor KFaktor=SMAX/zul_sigma Last_alt=Last Last=Last/KFaktor ! Es wird die Differerenz der ersten und zweiten bzw. i-ten i+1ten Last berechnet ! und durch die erste bzw. i-te Last geteilt. Wenn die Lastdifferenz kleiner oder ! gleich 1/Mio. (=Genau) ist wird die DOWHILE Schleife am Ende des Durchlaufs ! verlassen (da Par=0), ansonsten weiter durchlaufen (Par=1). Differenz=(Last_alt-Last)/Last_alt Differenz2=Differenz*Differenz *IF, Differenz2, LE, Genau, THEN Par=0 *ELSE Par=1 *ENDIF FDELE, ALL ! Aufbringen der aktuellen Last auf die Knoten (Last=Last/KFaktor) F, Lasta, FX, Last /PBC, ALL, , 1 NSUBST, 5, 50, 5 SOLVE *ENDDO
Dahinter steht folgender Gedankengang: Es wird eine Anfangslast aufgebracht (komplett: ALast, auf die Knoten aufgeteilt als Last), die Spannungen hervorruft. Diese Spannungen sind kleiner als die maximal zulässigen Spannungen. Als nächstes wird das Verhältnis von aktuellen und zulässigen Spannungen bestimmt (KFaktor). Da die aktuellen Spannungen kleiner als die zulässigen Spannungen sind liegt KFaktor zwischen 0 und 1. Als nächstes wird die Last die die aktuellen Spannungen verursacht zu Last_alt gesetzt und eine neue Last, ab da aktuelle Last, Last=Last/KFaktor berechnet. Diese neue Last ist, da KFaktor zwischen 0 und 1 liegt größer als die vorherige Last (jetzt Last_alt). Nun wird die Differenz dieser beiden Lasten in Bezug auf die erste Last berechnet und quadriert (Differenz2). Ist Differenz2 kleiner oder gleich 1/Mio. (=Genau) wird die DOWHILE Schleife am Ende verlassen, ansonsten weiter durchlaufen. Am Ende wird die neue Last (Last/KFaktor) auf die Knoten aufgebracht. Da dieses am Ende des ersten Durchlaufs größer ist als zu Beginn vergrößert sich auch die Spannung. Sollte in einem späteren Durchlauf (Durchlauf i) der Fall eintreten, dass die dann aktuelle Spannung größer als die zulässige Spannung ist, wird KFaktor größer als 1 und die neu berechnete Last (Last/KFaktor) kleiner als die aus dem Durchlauf davor (i-1). Nun sollte doch der Fall eintreten, das sich die Laständerung sich der geforderten Grenze von 1/Mio. annähert und somit die dann aktuelle Spannung (fast) gleich der zulässigen Spannung ist. Nach 7,25 Stunden bekomme ich die folgenden Fehlermeldungen: PCG detects that the stiffness matrix is ill-conditioned, Solution is not convergent, check rigid-body motion of your model. It may trigger a bisection in nonlinear analysis. *** ERROR *** CP = 23713.438 TIME= 15:02:11 Preconditioned conjugate gradient solver error level 1. Possibly, the model is unconstrained or additional iterations may be needed. Try running with a multiplier MULT > 1 in EQSLV command (3 > MULT > 1). Mal abgesehen davon, das trotz eines nicht allzu schnellen Rechners (1GB RAM) 7,25 Stunden Rechenzeit nicht effektiv ist (um nicht zu sagen inakzeptabel ist). wundert mich diese Fehlermeldung insofern, als das ich sie mit der DO-Schleife nicht bekommen habe. Mein Modell ist auch ordentlich gelagert, so dass die Möglichkeit „unconstrained“ wegfällt. In meinem EQSLV Kommando habe ich MULT auf 3 gesetzt, d.h. das fällt auch weg, bleiben nur noch die weiteren Iterationen. Und das nach 7,25 Stunden und bereits zig Tausend Iterationen? Habe ich in meinem Programmcode etwas übersehen oder ist der Gedankengang falsch? Wohlmöglich „pendelt“ die Laständerung immer hin und her, wird aber nie so gering wie gefordert. Deswegen dachte ich auch schon daran das Konvergenzkriterium (Genau) zu vergrößern (z.B.) auf 1/1000. Ich weiß nicht recht weiter und und hoffe hier findet sich jemand der mir Hinweise/Anregungen geben kann. Vielen Dank! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Arno07 Mitglied
Beiträge: 57 Registriert: 02.12.2008
|
erstellt am: 23. Mai. 2009 09:59 <-- editieren / zitieren --> Unities abgeben:
Ich antworte mir mal selber. Das Problem ist leider noch nicht gelöst, aber ich denke ich bin einen kleinen Schritt weiter. Ich habe das Modell jetzt durch verringern der Elementanzahl verkleinert. Außerdem habe ich noch PCGOPT,3 gesetzt. Nun dauert es ca. 1 Stunde bis der erste Lastschritt aufgebracht ist und alle 5 Substeps konvergieren. Danach geht es mit der DOWHILE Schleife weiter und wie lange das dann noch dauert weiß ich nicht. Die 1 Stunde alleine für den 1. Lastschritt ist mir auch schon zuviel. Bei oben beschriebenem Vorgehen habe ich auch die Anfangslast (ALast) variiert und festgestellt, dass, wenn diese sehr stark vergrößert wird, die Lösung deutlich länger dauert und evtl. auch die Substeps verringert werden. Konvergenz ist erreicht wenn F Convergence Value < CRITERION gilt. Nun ist meine Frage ob es da eine Möglichkeit gibt diese Bedingung möglichst rasch, also ohne allzu viele Iterationen pro Substep, zu erfüllen. Nur durch probieren allein zum Ziel zu kommen dauert unter Umständen sehr lange und ist somit unbefriedigend. Ist es zum Beispiel möglich anhand der ersten Gegenüberstellung von Convergence Value und CRITERION schon möglich abzuschätzen, ob die gewählten Werte (in diesem Fall die Last) sinnvoll sind/ist? Im Grunde will ich ja die Last "einfangen", die Spannungen verursacht, die möglichst nah an den zulässigen Spannungen liegen. Wobei es natürlich im Laufe der Lastaufbringungen im Modell zu Veränderungen kommt (Kontakt etc...). Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Arno07 Mitglied
Beiträge: 57 Registriert: 02.12.2008
|
erstellt am: 27. Mai. 2009 09:33 <-- editieren / zitieren --> Unities abgeben:
Die Verkleinerung des Modells hat leider nicht zum Erfiolg geführt. Deshalb habe ich nun die Schleife komplett rausgenommen. Stattdessen sollen zwei Lastschreibe berechnet werden: 1. Lastschritt: Last (kleiner als maximal zulässige Last) wird aufgebracht und daraus die maximale Spannung ermittelt. 2. Lastschritt: Last wird um KFaktor=(maximale Spannung aus Lastschritt 1)/(maximal zulässige Spannung) Da ich mich im linear-elastischen Bereich befinde, müsste ich doch nach dem 2. Lastschritt die maximal zulässige Last erhalten, die die maximal zulässige Spannung hervorruft. Leider bricht die Berechnung im 2. Lastschritt beim 3. Zwischenschritt ab und ich weiß nicht weshalb. Ich hänge meine Eingabedatei mal mit in dieses Posting und hoffe das jemand einen Tipp geben kann bzw. Rat weiß [Diese Nachricht wurde von Arno07 am 08. Jun. 2009 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Tschenzi Mitglied
Beiträge: 81 Registriert: 20.01.2009 Ansys Classic 11.0
|
erstellt am: 27. Mai. 2009 10:38 <-- editieren / zitieren --> Unities abgeben: Nur für Arno07
|
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
|