| |  | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Ansys | | |  | Ansys: auf dem Weg zur künstlichen Intelligenz?, ein Fachartikel
|
Autor
|
Thema: APDL: Temperaturänderung über d,all und Bestimmung der mittleren Temperatur (3429 mal gelesen)
|
Felix K Mitglied
 Beiträge: 9 Registriert: 22.01.2015 ANSYS 15.0.0 (Workbench)
|
erstellt am: 22. Jan. 2015 17:06 <-- editieren / zitieren --> Unities abgeben:         
Moin liebe ANSYS Nutzer, mein Skript funktioniert leider nicht, und ich hoffe, dass mir hier jemand aufzeigen kann wo es einen Mangel aufweist. Zuvor jedoch eine kleine Erklärung: "Was soll es eigentlich tun?" Das Skript soll die Temperatur einer Komponente um den Wert X verändern. Dafür berechnet es den mittleren Wert der Temperatur, verändert diesen um X und setzt dann das Element auf die ermittelte Temperatur. Die Mittlere Temperatur wird bestimmt mit:
Code: !Ted Harris, PADT, revised 6/10/03 ! *get,num_,node,,count cm,n_tmp,node nsel,a,,,all *get,nmax_,node,,num,max *get,nmin_,node,,num,min cmsel,s,n_tmp *del,nstat_ *dim,nstat_,array,nmax_-nmin_ *vget,nstat_(1),node,nmin_,nsel *vmask,nstat_(1) *del,n_temps_ *dim,n_temps_,array,nmax_-nmin_ *vget,n_temps_(1),node,nmin_,temp *vscfun,tsum_,sum,n_temps_(1)Tavg=tsum_/num_ *msg,ui,Tavg Average Temperature of Selected Nodes is %G num_= $nmax_= $nmin_= $nstat_= $n_temps_= $tsum_= cmdel,n_tmp
Das habe ich auch bereits getestet und es klappt. (Es ist die Oberflächentemperatur, aber das reicht mir für meine Simulation - Wenn jemand eine einfachere Methode für Selbiges mit Volumina hat, nehm ich diese aber gerne) Die Knotenauswahl für diese Bestimmung erfolgt mit:
Code: cmsel,none cmsel,all,myelementname(i),node
Da vermute ich das Problem - myelementname(i). Ich glaube, dass ANSYS das nicht versteht oder ich damit irgendwo etwas falsch mache. So habe ich es definiert:
Code: *dim, myelementname, string, 2*elemente, 1 myelementname(1)=element_l myelementname(2)=element_m myelementname(3)=element_r myelementname(4)=velement_l myelementname(5)=velement_m myelementname(6)=velement_r
"elemente" ist =3 Die ersten drei elemente sind Flächen, die letzten drei sind Volumenelemente (Definiert als Komponenten direkt in der WB) Hier wird die Temperatur dann auf den Mittelwert (Tempotemp)+X gesetzt. Das allsel und dann direkt esel ist vmtl überflüssig, aber da ich sie ggf auch alleinstehend benutzen möchte, habe ich sie dagelassen.
Code: esel,s,,,myelementname(i+3) nsle,s,all tempotemp=tempotemp+X d,all,temp,tempotemp allsel esel,s,,,myelementname(i+3) nsle,s,all ddel,all,temp allsel
Hoffe ich hab nichts vergessen Felix K 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: 22. Jan. 2015 18:02 <-- editieren / zitieren --> Unities abgeben:          Nur für Felix K
Der Quelltext ist so (für mich) nicht komplett verständlich: Warum wird myelementname als String vereinbart? Was ist myelementname? Warum sollen alle Knoten von ausgewählten Elementen mit dem Mittelwert der Temperatur beaufschlagt werden, wenn doch nur von Knoten die mittlere Temperatur ermittelt worden ist? Mittlere Temperaturen lassen sich so eingeschränkt ermitteln, wenn alle Elemente gleich groß sind! (Fehler lassen sich besten mit einem abgerüsteten lauffähigen Quelletxt finden.) ------------------ Viel Erfolg wünscht Wolfgang Schätzing Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Felix K Mitglied
 Beiträge: 9 Registriert: 22.01.2015 ANSYS 15.0.0 (Workbench)
|
erstellt am: 22. Jan. 2015 18:41 <-- editieren / zitieren --> Unities abgeben:         
myelementname habe ich zum String gemacht, weil ich an folgender Stelle "esel,s,,,myelementname(i+3)" beispielsweise "esel,s,,,velement_r" haben möchte. Und diese Information müsste doch eigtl als String gespeichert werden - oder? Wenn ich den letzten der oben eingeführten Codes allein und ohne Array verwende (Also bspw mit myelementname(6)), dann funktioniert alles einwandfrei. myelementname ist also einfach nur ein Array für die Namen aller verwendeter Komponenten. Die Elemente bei denen ich die Temperatur verändere sind zum einen sehr dünn, und sie haben eine sehr gleichmäßige Temperatur. Die Maße sind ca 200x200x8 (mm), daher beschreibt die Oberfläche bereits recht gut "was im Inneren vorgeht". Alle Elemente sind auch identisch von den Maßen her. Ich habe mir mal den Lösungsinformationslog durchgelesen; obwohl ich "*do,i,1,3,1" verwende, wird mir dort das i nie mit einem von 1 verschiedenem Wert angezeigt. Habe testweise eine Abfrage eingefügt "*if,i,eq,3,then.." diese wird nicht ausgelöst. 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: 23. Jan. 2015 17:26 <-- editieren / zitieren --> Unities abgeben:          Nur für Felix K
Welchen Wert besitzt "element_l" ? Die Anweisungen innerhalb einer Laufanweisung werden im Textausgabefenster in der Voreinstellung nicht reflektiert. (Mir scheint, dass alles sehr verkompliziert wird.) ------------------ Viel Erfolg wünscht Wolfgang Schätzing Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Felix K Mitglied
 Beiträge: 9 Registriert: 22.01.2015 ANSYS 15.0.0 (Workbench)
|
erstellt am: 29. Jan. 2015 08:44 <-- editieren / zitieren --> Unities abgeben:         
Entschuldigung - etwas verspätet die Antwort, habe noch viel zu tun. Element_l ist der Name einer Flächenkomponente. Mein Skript soll folgendes handhaben können: Alle zwei Laufschritte ausgeführt werden Mittlere Temperatur eines Körpers bestimmen Mittleren Temperaturwert verändern und dem Körper geben Alles für verschiedene Körper (Array) Wenn du dir die Mühe machen möchtest, dann kannst du ja aufzeigen wo und wie ich das Ganze einfacher machen kann. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Felix K Mitglied
 Beiträge: 9 Registriert: 22.01.2015 ANSYS 15.0.0 (Workbench)
|
erstellt am: 29. Jan. 2015 11:26 <-- editieren / zitieren --> Unities abgeben:         
Um ein paar Fehlerquellen nochmals auszuschließen habe ich ein paar Skripte laufen lassen. Und dabei einiges aufhellen können. Der Gesamtcode ist nun:
Code:
!Definiere die Komponentennamen als Array *dim, myelementname, string, 6, 1 myelementname(1)=element_l !Fläche myelementname(2)=element_m !Fläche myelementname(3)=element_r !Fläche myelementname(4)=velement_l !Körper myelementname(5)=velement_m !Körper myelementname(6)=velement_r !Körper!Dies wird benutzt um zu schauen, ob der Körper zuletzt erwärmt wurde - hier jedoch nur für das *IF *dim, elewarm, array, 3, 1 elewarm(1)=0 elewarm(2)=0 elewarm(3)=1 !Um einen Fehler bei Array(j+3) auszuschließen, habe ich das m so definiert, dass ich Array(m) !schreiben kann. m=0 !Ab hier das eigentliche Skript !Läuft von 1 bis 3 *do, j, 1, 3, 1 !Setzt m auf den jeweiligen Wert m=j+3 !Diese Abfrage funktioniert offenbar nicht, mehr dazu unter (1) *if, elewarm(j),eq,0,then !Wähle eines der Elemente aus. Funktioniert auch nicht (2) esel,s,,,myelementname(m) nsle,s,all !Setze die Temperatur auf 100°C, nur um schnell zu schauen, ob ausgelöst wird oder nicht d,all,temp,100 allsel *else esel,s,,,myelementname(m) nsle,s,all
!Hier wird die Temperatur auf -100°C gesetzt, um es schnell und einfach sehen zu können. d,all,temp,-100 allsel *endif *enddo
(1) Es ist egal welche Werte bei elewarm(1) und elewarm(2) stehen, es wird immer nur der Effekt ausgelöst, welcher bei elewarm(3) hinterlegt ist. Dies hat mit großer Wahrscheinlichkeit mit dem unter (2) aufgeführten Problem zu tun. Daher kann es sein, dass die Abfrage doch funktioniert, aber immer vom letzten Befehl überschrieben wird.
(2) Es werden alle drei Körper auf die selbe Temperatur gesetzt. Das führt zu dem Schluss, dass auch alle ausgewählt werden, nicht aber - wie gewollt - nur immer eins. Wenn ich einen festen Wert für alle "j" und "m" einsetze, die Schleife komplett entferne und es dann laufen lassen, werden ebenfalls alle auf -100°C gesetzt. In der Bibliothek findet man:
Zitat: ESEL, Type, Item, Comp, VMIN, VMAX, VINC, KABS Selects a subset of elements. S Select a new set (default).
Dieser Befehl setzt also definitionsgemäß ein neues Set an Elementen. In diesem Fall den jeweiligen unter myelementname(m) hinterlegten Körper. (Eigentlich..) Zitat: NSLE, Type, NodeType, Num Selects those nodes attached to the selected elements. Select a new set (default).
Anhand der Formulierung sollte dies nur die Knoten auswählen, welche zu dem unter ESEL ausgewählten Element gehören. Fehlermeldungen:
Zitat: A default command range is not provided for the ESEL command. The ESEL command is ignored.
Dies hilft weiter, denn wenn wir die Auswahl nicht einschränken, dann werden ALLE Knoten der Standardauswahl gewählt, also alle. Jedoch bin ich mir nicht sicher inwiefern ich den Befehl angleichen muss. - Ich habe versucht, sowohl bei VMIN als auch bei VMAX den Elementnamen hinzuschreiben - Nichts - Des Weiteren habe ich das Element zu COMP geschrieben - Nichts Zitat: Unknown parameter name= ELEMENT_L. A value of 7.888609052E-31 will be used.
Offensichtlich darf man die Komponentennamen nicht einfach in einen Array schreiben. Sollte man das eventuell über die Nummern der Elemente lösen? Jedes Element müsste ja eine eindeutige ID haben. - - - - - Ich habe bei den Strings mal '' um die Zeichen gemacht und diese werden jetzt wohl erkannt. Jedenfalls spuckt ANSYS kein WARNING dazu mehr aus. Allerdings kommt jetzt folgende neue Fehlermeldung: Zitat: Specified range of 0 to 0 is not permitted. The ESEL command is ignored.
Offenbar sind wir also noch nicht ganz über den Berg. [Diese Nachricht wurde von Felix K am 29. Jan. 2015 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. Jan. 2015 12:18 <-- editieren / zitieren --> Unities abgeben:          Nur für Felix K
Funktioniert dies hier? Code: !Definiere die Komponentennamen als Array *dim, myelementname, string, 6, 1 myelementname(1)='element_l' !Fläche myelementname(2)='element_m' !Fläche myelementname(3)='element_r' !Fläche myelementname(4)='velement_l' !Körper myelementname(5)='velement_m' !Körper myelementname(6)='velement_r' !Körper!Dies wird benutzt um zu schauen, ob der Körper zuletzt erwärmt wurde - hier jedoch nur für das *IF *dim, elewarm, array, 3, 1 elewarm(1)=0 elewarm(2)=0 elewarm(3)=1 !Um einen Fehler bei Array(j+3) auszuschließen, habe ich das m so definiert, dass ich Array(m) !schreiben kann. m=0 !Ab hier das eigentliche Skript !Läuft von 1 bis 3 *do, j, 1, 3, 1 !Setzt m auf den jeweiligen Wert m=j+3 !Diese Abfrage funktioniert offenbar nicht, mehr dazu unter (1) *if, elewarm(j),eq,0,then !Wähle eines der Elemente aus. Funktioniert auch nicht (2) cmsel,s,%myelementname(m)%, elem nsle,s,all !Setze die Temperatur auf 100°C, nur um schnell zu schauen, ob ausgelöst wird oder nicht d,all,temp,100 allsel *else cmsel,s,%myelementname(m)%, elem nsle,s,all
!Hier wird die Temperatur auf -100°C gesetzt, um es schnell und einfach sehen zu können. d,all,temp,-100 allsel *endif *enddo
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Felix K Mitglied
 Beiträge: 9 Registriert: 22.01.2015 ANSYS 15.0.0 (Workbench)
|
erstellt am: 30. Jan. 2015 15:01 <-- editieren / zitieren --> Unities abgeben:         
Zitat: SELECT COMPONENT ABCEL *** ERROR *** CP = 1.092 TIME= 14:39:18 Component ABCEL is not defined.
Erst kam VVVEL, dann habe ich die drei Einträge von myelementname() umbenannt in "aelement","belement" und "celement". Offenbar schreibt er diese irgendwie zusammen?! In dem kurzen Bericht wird aber die richtige Initialisierung gezeigt (Kopiert aus einem Versuch mit "velement_x"):
Zitat: SET PARAMETER DIMENSIONS ON MYELEMENTNAME TYPE=STRI DIMENSIONS= 6 1 1 PARAMETER MYELEMENTNAME(1) = element_l PARAMETER MYELEMENTNAME(2) = element_m PARAMETER MYELEMENTNAME(3) = element_r PARAMETER MYELEMENTNAME(4) = velement_l PARAMETER MYELEMENTNAME(5) = velement_m PARAMETER MYELEMENTNAME(6) = velement_r
Klappt also noch nicht ganz, aber nur um die Änderungen auch nachzuvollziehen: cmsel, weil wir eine definierte Komponente auswählen möchten %name%, weil wir wollen, dass dort Text ausgewählt wird und kein Integer o.ä. Sooo.. ich habe noch einen Test angeschoben:
Code: mystorage=myelementname(1) mystorage=myelementname(2) mystorage=myelementname(3) mystorage=myelementname(4) mystorage=myelementname(5) mystorage=myelementname(6)
Zitat: PARAMETER MYSTORAGE = eeevvvel PARAMETER MYSTORAGE = eevvvel PARAMETER MYSTORAGE = evvvel PARAMETER MYSTORAGE = vvvel PARAMETER MYSTORAGE = vvel PARAMETER MYSTORAGE = vel
Es hängt die ersten Buchstaben aneinander und nimmt dann danach das "el" von "element". Ist das Aufrufen des Inhalt über myelementname(i) also falsch, nehmen wir den Inhalt ab i heraus? Alternativ könnte man natürlich die Flächen und Körper so umbenennen, dass es dann passt, aber das ist auf jedenfall unschön. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Felix K Mitglied
 Beiträge: 9 Registriert: 22.01.2015 ANSYS 15.0.0 (Workbench)
|
erstellt am: 30. Jan. 2015 15:42 <-- editieren / zitieren --> Unities abgeben:         
Code: *dim,myelementname,string,80,6 myelementname(1,1)='element_l' myelementname(1,2)='element_m' myelementname(1,3)='element_r' myelementname(1,4)='velement_l' myelementname(1,5)='velement_m' myelementname(1,6)='velement_r'
Das ist die Lösung. Wir haben mit myelementname(1) den ersten Buchstaben gesetzt, mit (2) den zweiten und (6) hat dann den letzten Buchstaben gesetzt. Die erste Zahl bei *dim auf String bezogen gibt die Länge der einzelnen Strings an, nicht die Anzahl. Allerdings habe ich jetzt noch zwei Fragen: d,all,temp,xxx beschränkt meines Wissens nach den Freiheitsgrad Temperatur. Wie kann ich die Temperatur verändern und den Freiheitsgrad wieder freisetzen? Mit "ddel,all,temp" wird die zuvor vorgenommene Änderung wieder zurückgesetzt. Und die zweite: Bei d,all,temp,100 zeigt mir ANSYS eine Maximale Temperatur von 127°C an, dabei ist die Startemperatur 22°C.. Und diese überhöhung von 27°C bleibt auch bestehen, es ist also keine Ungenauigkeit bei irgendwelchen Rechnungen, die sich nach einer Sekunde wieder legt. Bei der Betrachtung zeigt es mir mein Element mit 127 (oder -124 im Negativen) an, wenn ich mir speziell dafür jedoch die Temperatur anzeige, dann ist sie konstant (100,-100). *edit: Ich danke aber schonmal für eure Hilfe, genügend Denkanstöße um einige Probleme zu beheben!
[Diese Nachricht wurde von Felix K am 30. Jan. 2015 editiert.] 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: 30. Jan. 2015 18:47 <-- editieren / zitieren --> Unities abgeben:          Nur für Felix K
d,all,temp,xxx hält die Temperatur der ausgewählten Knoten auf den Wert xxx während der gesamten Rechnung fest. Soll eine Temperatur nur als Anfangswert vorgegeben werden, muss das mit ic,,,,, gemacht werden. Temperatur von 127°C Ist das eine transiente Rechnung?
------------------ Viel Erfolg wünscht Wolfgang Schätzing Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Felix K Mitglied
 Beiträge: 9 Registriert: 22.01.2015 ANSYS 15.0.0 (Workbench)
|
erstellt am: 30. Jan. 2015 20:26 <-- editieren / zitieren --> Unities abgeben:         
Es handelt sich um eine thermisch transiente Berechnung, ja. Das hatte wohl ich vergessen zu sagen. Anfangswert dürfte nicht klappen, denn die Temperaturänderung soll zeitlich versetzt mehrmals eintreten. Ich weiß, dass es dafür in der WB "Interne Wärmeerzeugung" gibt, diese lässt sich aber nicht vernünftig steuern. In der finalen Anwendung möchte ich, dass die Temperatur auf einen temperaturabhängigen Wert gesetzt/verändert wird. Der ANSYS Support meinte dazu nur, dass das mit der WB-Variante nicht möglich sei. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
ChristophN Mitglied Berechnungsingenieur
  
 Beiträge: 773 Registriert: 13.12.2008
|
erstellt am: 30. Jan. 2015 20:58 <-- editieren / zitieren --> Unities abgeben:          Nur für Felix K
|
Felix K Mitglied
 Beiträge: 9 Registriert: 22.01.2015 ANSYS 15.0.0 (Workbench)
|
erstellt am: 30. Jan. 2015 21:11 <-- editieren / zitieren --> Unities abgeben:         
In der Praxis verwenden wir den elektrokalorischen Effekt. Da ich allerdings nicht sämtliche Materialeigenschaften bezogen auf Elektromagnetische Felder simulieren kann/möchte, schien mir diese Lösung die beste. *edit: Die Wärme kommt von einem Bauteil das gekühlt werden muss. Beispielsweise eine technische Einheit, diese soll dann über den elektrok. Effekt gekühlt werden. [Diese Nachricht wurde von Felix K am 30. Jan. 2015 editiert.] 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: 31. Jan. 2015 08:45 <-- editieren / zitieren --> Unities abgeben:          Nur für Felix K
Temperatur von 127°C Wenn bei einer transienten Rechnung unphysikalische Temperaturen auftreten, liegt das an dem unangemessenen Verhältnis von geometrischer (Netzdichte) zu zeitlicher Schrittweite. ------------------ Viel Erfolg wünscht Wolfgang Schätzing 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: 31. Jan. 2015 14:30 <-- editieren / zitieren --> Unities abgeben:          Nur für Felix K
Mit dem elektrokalorischen Effekt habe ich mich bisher nicht beschäftigt, aber wenn ich das mit Ansys modellieren wollte, würde ich so anfangen. ------------------ Viel Erfolg wünscht Wolfgang Schätzing [Diese Nachricht wurde von wosch am 01. Feb. 2015 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Felix K Mitglied
 Beiträge: 9 Registriert: 22.01.2015 ANSYS 15.0.0 (Workbench)
|
erstellt am: 05. Mrz. 2015 16:18 <-- editieren / zitieren --> Unities abgeben:         
Etwas spät, aber dennoch: Das Skript sieht zwar vielversprechend aus, allerdings komme ich um eine etwas komplexere Geometrie nicht herum. Denn "gefordert" sind die Kühlung (Bestehend aus einigen Elementen die mit der Funktion gesteuert werden sollten), ein zu kühlender Körper sowie die Aufhängung des Gesamtsystems. Dann verliert es einiges an Symmetrie.. Der Grund für die (bisher) fernbleibende Antwort ist, dass das Projekt und dessen Prioritäten etwas verändert wurden und ich andernorts sehr eingespannt bin - Manche Studenten haben tatsächlich noch Arbeit nebenbei.. Ich bitte alle Helfer um Entschuldigung und wünsche noch viel Erfolg weiterhin Felix K. PS: Werde das Forum weiterhin besuchen und etwaige Beiträge zum Thema lesen, sollte sich noch etwas ergeben.
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
 |