| | | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Ansys |
Autor
|
Thema: Restart-Befehl in Schleife bei transienter thermischer Simulation (1146 mal gelesen)
|
Walfleisch Mitglied
Beiträge: 10 Registriert: 01.05.2014
|
erstellt am: 10. Sep. 2015 19:16 <-- editieren / zitieren --> Unities abgeben:
Hallo, ich möchte in einer thermischen Simulation zu jedem Zeitpunkt die simulierte Temperatur an einem bestimmten Knoten mit einer gemessenen Temperatur vergleichen. Je nach Differenz zwischen beiden möchte ich dann die Randbedingungen anpassen und denselben Zeitschritt nochmal rechnen. Das möchte ich sooft wiederholen, bis die Differenz einen vorgegebenen Wert unterschreitet. Dann soll ein nächster Zeitschritt gerechnet werden mit neuen "Anfangs-Randbedingungen", die dann wieder iterativ angepasst werden. Ziel ist es, die Simulation mit einer Messung anzugleichen und die Randbedingung zu bestimmen, die bei der Messung vorliegt. Meine Idee ist, in einer Schleife den RESTART Befehl zu benutzen, die Randbedingungen anzupassen, neu zu rechnen und dann die Temperaturen zu vergleichen.
Leider funktioniert es nicht so, wie gewollt. Es findet zwar ein Restart statt (kann im Log-file nachgeguckt werden). Allerdings werden die Randbedingungen nicht neu gesetzt. Er rechnet nur 10 x hintereinander dasselbe Problem, ohne die Schleife und die dortige Neubestimmung der Randbedingung zu berücksichtigen. Habe mal ein Beispielskript vorbereitet, das das Problem erzeugt. Das Skript macht so natürlich keinen Sinn, ist wie gesagt nur ein Beispiel:
Code:
! PREPROCESSING /prep7 ET,1,SOLID70! Materialeigenschaften MP,KXX,1,10000 MP,C,1,100 MP,DENS,1,10000 ! Geometrie BLOCK,0,10,0,1,0,1 LESIZE,ALL,1/3 ! Vernetzung VSEL,ALL VMESH,ALL ALLSEL,ALL ! Anpassungsfaktor faktor = 1 ! SOLUTION /solu rescontrol,define,all,1 outres,nsol,1 KBC,1 IC,ALL,TEMP,10 ! Anfangsbedingungen antyp,trans timint,on time,.1 nsub,5
NSEL,S,LOC,X,10 D,ALL,TEMP,50 ! Randbedingung ALLSEL, ALL solve ! 1. Schritt time,100 nsub,5 DDELE,ALL,TEMP ALLSEL, ALL solve ! 2. Schritt
*DO,i,1,10,1 antyp,,restart,2,1 ! Neustart NSEL,S,LOC,X,0 DDELE,ALL,TEMP D,ALL,TEMP,50*faktor ! Neudefinition der Randbedingung ALLSEL, ALL solve *GET,Te,node,38,temp *IF,Te,LE,100,THEN faktor = faktor+1 *ELSE i = 10 *ENDIF *ENDDO
Ablauf des Codes: 1) Anfangsbedingung des Quaders ist 10 K 2) [step1] Für 0,1 sek präge ich am rechten Rand eine Temperatur von 50K auf 3) [step2] Nach 0,1 sek lösche ich die Randbedingung und berechne die Temperaturentwicklung für 100s Dann setzt meine Iteration ein: ich starte von [step2] aus neu und präge nun am linken Rand eine Temperatur von 50 K auf. Dann vergleiche ich die berechnete Temperatur am Knoten 38 (willkürlich), ob sie kleiner als 100 K ist (willkürlich). Wenn ja, soll die Variable faktor um 1 erhöht werden für den nächsten Zeitschritt. Dann soll neu gerechnet werden. Nur leider wird bei der Wiederholung die Randbedingung
Code:
D,ALL,TEMP,50*faktor ! Neudefinition der Randbedingung
nicht berücksichtigt. Es bleibt stets bei den 50 K am linken Rand, obwohl das Beispiel natürlich so konstruiert ist, dass es mehrere Schleifendurchläufte bräuchte, damit die Temperatur am Knoten 38 auf über 100K ansteigt. Die Ansys Help habe ich schon zur Rate gezogen, finde da aber leidre kein Beispiel, wo der restart Befehl in einer Schleife ist.
Ich hoffe, ihr könnt mir hier ein paar wertvolle Tipps geben. Falls etwas unverständlich ist, bitte melden.
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
wosch Ehrenmitglied V.I.P. h.c. Elektrotechniker im Ruhestand
Beiträge: 2607 Registriert: 16.12.2004 Rechne zuerst ein Problem nach, für das Du eine analytische Lösung kennst.
|
erstellt am: 11. Sep. 2015 07:20 <-- editieren / zitieren --> Unities abgeben: Nur für Walfleisch
|
Walfleisch Mitglied
Beiträge: 10 Registriert: 01.05.2014
|
erstellt am: 11. Sep. 2015 08:34 <-- editieren / zitieren --> Unities abgeben:
Dann ist leider das Ansys-Zeitsignal nicht mehr synchron zum Mess-Zeitsignal. Ich habe zu jedem Zeitpunkt, den ich rechne, eine gemessene Temperatur an dem Messknoten vorliegen. Und zu dieser Zeit möchte ich die Simulation an die Messung anpassen. Wenn ich nicht den Restart-Befehl verwende, dann läuft doch in jeder Iteration (d.h. in der Schleife), in der ich Messung und Simulation angleiche, das Ansys-Zeitsignal einfach weiter, oder irre ich mich? Hatte auch schon versucht, dass Zeitsignal einfach nicht zu ändern während der Iteration sondern lediglich, wenn eine Lösung gefunden wurde. Nur dann meckert Ansys natürlich z.B. in der zweiten Schleifeniteration, dass die Lösung zu dem Zeitpunkt schon existiert. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
solve1 Mitglied Berechnungsingenieur
Beiträge: 624 Registriert: 27.05.2008 Ansys APDL Ansys WorkBench
|
erstellt am: 11. Sep. 2015 10:24 <-- editieren / zitieren --> Unities abgeben: Nur für Walfleisch
hi, wenn du einen Restart machst, wird die database aus dem file *.rdb (restart database) NEU eingelesen. Das beinhaltet auch alle Parameter. D.H. die Parameter im Loop werden immer wieder auf ihren Ausgangszustand zurück gesetzt. Daher 1) ein parsav vor und ein parres nach dem restart einfügen. 2) Für so einen Loop ist es immer ganz sinnvoll wenn man sich eine Kontrollmöglichkeit einbaut. Ich mach das gern in einer separaten Datei. Habe dir hier mit dem /Output Kommando die Temperaturen je Loop in eine Datei "temperatures.txt" geschrieben: Current temperature at node 38 (START): 10.0000089 Current temperature at node 38 (1): 40.8133364 Current temperature at node 38 (2): 79.3299956 Current temperature at node 38 (3): 117.846655
3) Der Abbruch des Loops durch setzen der Loop variable funktioniert so nicht. Hierfür gibt's das *Exit kommando > angepastes script im anhang Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Walfleisch Mitglied
Beiträge: 10 Registriert: 01.05.2014
|
erstellt am: 11. Sep. 2015 18:02 <-- editieren / zitieren --> Unities abgeben:
Klasse. Das Parameterspeichern und -laden hatte mir gefehlt. Der Restart funktioniert jetzt. Wusste nicht, dass das nötig ist. Die Kontrollmöglichkeit hatte ich im Beispiel weggelassen. Mache das immer über den /INPUT Befehl, in der ich eine Skriptdatei lade, in der dann steht, dass eine bestimmte Variable z.B. in eine TXT-Datei geschrieben werden soll. Ist zwar total umständlich, funktioniert aber und habe ich deswegen nie wieder geändert Den /OUTPUT Command kannte ich noch nicht. Danke dafür.
Danke für die kompetente Hilfe und schönes Wochenende. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
|