| | | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Ansys |
Autor
|
Thema: APDL Element-Abfrage Alle Knoten auf Auswahl (3190 mal gelesen)
|
Robse-Ponte Mitglied Entwicklungsingenieur
Beiträge: 104 Registriert: 03.09.2007 AutoCAD Mechanical 2021 Siemens NX 2000 Teamcenter 13.1.0.1 Ansys 2019 R2
|
erstellt am: 09. Mai. 2018 02:26 <-- editieren / zitieren --> Unities abgeben:
Guten Tag zusammen und Hallo an die Profis, Ich bin blutiger Anfänger (Student) und versuche seit Ewigkeiten, eine Schale (grüne Fläche siehe Bild im Anhang) mit APDL anzuwählen. Voraussetzung: Named Selection Kante (rot markiert im Bild) ist vorhanden. Bisher hatte ich nur zwei Flächen, die mehr oder weniger senkrecht zueinander standen. Mein Vorgehen bis jetzt lautete: - 2. Knoten auf der Linie suchen. Randknoten gab manchmal Fehler aus. - zugehörige Elemente finden - Zugehörigen Type (Schale4) finden durch Auswahl der kleineren Schale Ist dieses Vorgehen Knoten->Element->Type so richtig? Mein Versuch bis jezt: cmsel, s, Kante%edgenum% cm, Knoten, node ! Knotenkomponente n1 = node(0,0,0) ! erster Knoten nsel, u, node,,n1 ! Abwählen n2 = node(0,0,0) ! zweiter Knoten esln e_test = elnext(0) *get, e1_type, elem, e_test, attr, type ! Schale 1 Typ finden esel, u, type,, e1_type e_test = elnext(0) *get, e2_type, elem, e_test, attr, type ! Schale 4 Typ finden cmsel, s, Knoten !Knoten wieder anwählen esln !Zugehörige Elemente wieder anwählen !Auswahl Schale 4, da wenige Elemente darauf sind esel, r, type,, e1_type *get, e1_count, elem, 0, count !Elemente zählen Schale 1 cmsel, s, weldnodes esln esel, r, type,, e2_type !Elemente zählen Schale 4 *get, e2_count, elem, 0, count *if,e1_count,le,e2_count,then Auswahl = e1_type *else Auswahl = e2_type *endif Bisher war die Schale oben immer ein Stummel und klein (gelb markiert im Bild links). Deshalb ging das mit zählen sehr gut. Jetzt kann die Schale auch grösser sein. Unten können seit Neuem auch mehrere Schalen liegen.
Jetzt mit vier Schalen anstatt zwei wählt er mir mit dem Befehl elnext(0) teilweise zusätztlich zu dem Element auf S1 die Elemente auf S2 oder S3 anstatt S4 an (Je nachdem welches Element am niedrigsten ist, elnext(0) sei Dank, ich weiss es leider nicht besser). Bei zwei Schalen ging das damals noch super... Gibt es eine bessere Auswahlmethode der Elemente? Ich möchte immer dass eine Schale unten (S1/S2/S2 egal welche, brauche ich nur um ein CSYS zu machen) und die S4 gewählt wird. Ich benötige eigentlich eine Abfrage, bei der ich die Schale wählen will, auf der alle Knoten von meiner Komponente "Knoten" darin vorkommen. Ich möchte keine Musterlösung. Aber über jeden Tip, wie ich die Auswahl machen kann wäre ich sehr dankbar. Die Hilfe ist für mich sehr schwierig, da vieles möglich ist, mir aber der komplette Überblick über die Vielzahl an Befehlen fehlt. Danke und freundliche Grüsse 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: 14. Mai. 2018 13:09 <-- editieren / zitieren --> Unities abgeben: Nur für Robse-Ponte
Hi, Einfach wäre die Auswahl, wenn alle Elemente der "grünen" Schale einem Elemttyp angehören (das macht z.B. die Workbench, falls Du dort das Netzt erstellt hast) oder aus Schalenelementen besteht, wobei alle anderen Elemente z.B. Solids sind. Auwahl nach Elementtyp (Annahme: Alle Knoten der Named Selection Kante haben die Koordinate z=0, liegen also in der x-y-Ebene): allsel cmsel,s,Kante%edgenum% n1=node(0,0,0) ! erster Knoten *get,x_node,node,n1,loc,x *get,y_node,node,n1,loc,y n2=node(x_node,y_node,500) !Knoten der an der Position von N1 aber weit oberhalb der x-y-Ebene liegt esln !Selektiert Elemente zu diesem Knoten *get,elem_num,elem,,num,min !Elementnummer eines der selektierten Elemente *get,etype_,elem,elem_num,attr,type# allsel Esel,s,type,,etype_ !Alle Elemente dieses Elementtyps selektieren nsle cm,grueneschale,elem !Komponente erstellen Ähnliches Vorgehen für gleichen Elementname, z.B. shell281.
------------------ Gruß, A. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Robse-Ponte Mitglied Entwicklungsingenieur
Beiträge: 104 Registriert: 03.09.2007 AutoCAD Mechanical 2021 Siemens NX 2000 Teamcenter 13.1.0.1 Ansys 2019 R2
|
erstellt am: 14. Mai. 2018 15:37 <-- editieren / zitieren --> Unities abgeben:
Hallo Arnd, Danke für den wertvollen Input und den coolen Ansatz. Erst einmal die Antwort auf dein Frage: Ja, der Befehl läuft in der Workbench. Ansich ziemlich gute Idee mit dem Knoten oberhalb der Linie. Ich wusste nicht, dass man mit esln alle Elemente anwählen kann. Leider habe ich keine feste Linienausrichtung. aber sie sind immer Karthesisch, somit parallel zu den Systemebenen. Deinen Ansatz könnte ich ja weiterspinnen und alle 3 Koordinaten von zwei Knoten der Linie abfragen. Damit bekomme ich dann die Richtung was ein ordentlicher Schritt vorwärts ist. Das klappt mit drei If Abfragen dann gut. Entschuldige, dass ich mich nicht sauber ausgedrückt habe, bzw. die Hälfte der Informationen nicht klar weitergebe. Das ist leider nur ein Ausschnitt aus dem Teil. Es können also noch andere Schalen darüberliegen, die eventuell eine niedrigere Elementnummer besitzen als diese auf der grünen Schale. Dann würde "elem" ja diese Schale anwählen, verstehe ich das richtig? Deshalb die Frage auch, ob es eine Möglichkeit gibt, die Schale in Kombination mit der Linie zu prüfen (sozusagen wenn Schnittmenge von Schale und Linie passt dann ist das die gewünschte Schale). Die Frage ist, ob das machbar ist? Würde das eventuell mit einer Schleife klappen, in der ich alle Elemente prüfe, ob sie einen gemeinsamen Knoten mit der Linie haben? Sollte ja egal sein welches Element. Gibt es so eine Möglichkeit? Wie bei der Programmiersprache C der Befehl Contain? Gibt es ein Aquivalent dazu in APDL? Dummes Beispiel mit ner anderen Programmiersprache... Aber bin noch nicht so fit mit APDL. Herzliche Grüsse und Danke noch einmal. 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: 14. Mai. 2018 16:03 <-- editieren / zitieren --> Unities abgeben: Nur für Robse-Ponte
Hi, Zuerst mal ein Tip: Solche Befehle, die in der WB laufen sollen immer erst in der Classic ausprobieren. Aber das tust Du ja sicher schon. Ansonsten: APDL hat mit C nicht so viel zu tun, eher mit Basic. Der Befehl *get ist sehr mächtig. Den solltest Du Dir in der Hilfe mal genauer ansehen. Wenn noch andere Schalen darüberliegen, brauchst Du natürlich die ungefähre Position der gesuchten Schale. Wenn Du die Position nicht kennst, fällt mir noch ein: cmsel, s, Kante%edgenum% n1=node(0,0,0) ! erster Knoten nsel,r,,,n1 esln *get,enum_,elem,,Count *get,temp_,elem,,min *do,i,1,enum_ *get,etype_%i%,elem,temp_,attr,type temp_=ndnext(temp_) *enddo Damit hast Du dann die Elementtypen von beiden Schalen gespeichert. Einfacher ist es allerdings, gleich in der WB im Strukturbaum vor der Vernetzung die Elementtypnummer eines Bauteils zu speichern. Natürlich kannst Du prüfen, ob ein Knoten Teil der named selection ist, ich sehe aber nicht, was das Dir bringt. Diese Knoten kennst Du ja schon.??? Wenn Du das aber machen willst, würde ich eine *do-Schleife und *get verwenden. ------------------ Gruß, A. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Robse-Ponte Mitglied Entwicklungsingenieur
Beiträge: 104 Registriert: 03.09.2007 AutoCAD Mechanical 2021 Siemens NX 2000 Teamcenter 13.1.0.1 Ansys 2019 R2
|
erstellt am: 20. Mai. 2018 00:43 <-- editieren / zitieren --> Unities abgeben:
Hallo Arnd, Danke dir. Ja, ich "kämpfe" mit der Classic-Version. Bin leider Workbench-Student... "Natürlich kannst Du prüfen, ob ein Knoten Teil der named selection ist, ich sehe aber nicht, was das Dir bringt" Mir geht es darum, meine momentane Auswahl zu prüfen, und mit dem Inhalt der Named Selection zu vergleichen. Ich versuche verzweifelt den Elementtyp ET4 zu separieren [Bild im Anhang], der an alle Knoten (1-10) grenzt. Alle anderen Elementtypen besitzen ja nur Bruchteile (Elementtyp/Schale 1 zb. grenzt nur an Knoten 1-3). Die Frage bleibt, ob das machbar ist mit APDL? Ich habe jetzt eine Schleife gebastel, in der alle Knoten rausgezogen werden. mit: cmsel, s, Knoten *get, ncount, node, 0, count habe ich mal die Anzahl der Knoten. mit der Schleife: *do,ct,2,ncount node_vorher = n1 n%ct% = nnear(node_vorher) ! Knotennummer nsel,u,node,,node_vorher *enddo kann ich alle Knoten manifestieren. Eventuell könnte ich die n%ct% auch in ein Array schreiben, falls das etwas bringt? Die Frage ist nur, wie kann ich jetzt mit diesen Knoten prüfen, ob Sie alle in einem der verbliebenden Elementtypen der momentanen Auswahl drin sind? Am Schluss soll ein Elementtyp übrig bleiben (der mit allen Knoten). Deshalb die dumme Frage mit dem Containbefehl als Analogie, der macht nämlich in C genau das. Mengen miteinander vergleichen und die Menge rausfiltern in der die Argumente vorhanden sind. Get habe ich mir schon öfter angesehen, aber der Befehl ist so vielschichtig, als Anfänger sehe ich da den Wald vor lauter Bäumen nicht. Soll keine Ausrede sein. Viele Grüsse und frohe Feiertage!
[Diese Nachricht wurde von Robse-Ponte am 20. Mai. 2018 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: 22. Mai. 2018 18:26 <-- editieren / zitieren --> Unities abgeben: Nur für Robse-Ponte
Hi, Es tut mir leid, aber ich glaube ich verstehe nicht ganz, wo Dein Problem ist. Bitte beschreibe noch mal, was Du auswählen möchtest. Wenn Du die grüne Schale auswählen möchtest: Elementtyp beim Vernetzen in Variable speichern (per command snippet, siehe Bildchen) und dann einfach auswählen. allsel Esel,s,type,,mytype War das Dein Anliegen?
------------------ Gruß, A. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Robse-Ponte Mitglied Entwicklungsingenieur
Beiträge: 104 Registriert: 03.09.2007 AutoCAD Mechanical 2021 Siemens NX 2000 Teamcenter 13.1.0.1 Ansys 2019 R2
|
erstellt am: 24. Mai. 2018 02:26 <-- editieren / zitieren --> Unities abgeben:
Hallo Arnd, Erst mal danke, dass du dich meiner annimmst. Das ganze ist leider etwas komplexer, da das Bild nur eine Vereinfachung und nicht die Endanwendung darstellt. Es sind viel mehr Schalen, teilweise mehrere winklig aneinander. Kurz nochmal erklärt, was ich beabsichtige: Ich suche einen Elementtypen (Schale), der vollständig an eine Kante (Named Selection mit aufsteigende Nummer) angrenzt. Mein "Weg" um das zu erreichen wäre, die Knoten als Schnittmenge zu benutzen. Bin aber ein Ansys-DAU. Bin für jeden Hinweis dankbar. Konkret würde das beispielsweise vom Bild meines vorherigen Posts so aussehen (N ist einfach nur die selbst erdachte Knotennummer): Named Selection hat Knoten: N1 N2 N3 N4 N5 N6 N7 N8 N9 N10 ET1: N1 N2 N3 ET2: N3 N4 N5 N6 N7 ET3: N7 N8 N9 N10 ET4: N1 N2 N3 N4 N5 N6 N7 N8 N9 N10 In ET4 (Schale grün) sind alle Knoten der Named Selection ----> Schale grün ist die richtige Hoffe ich konnte das richtig erklären Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Robse-Ponte Mitglied Entwicklungsingenieur
Beiträge: 104 Registriert: 03.09.2007
|
erstellt am: 24. Mai. 2018 02:44 <-- editieren / zitieren --> Unities abgeben:
Das was du geschrieben hast, habe ich angesehen und glaube verstanden, aber nicht weiterverfolgt, da ich keinen vernünftigen Algorithmus daraus erstellen konnte. Es geht dabei um eine Auswertung > 100 Named References... Wenn viele Schalen aneinandergrenzen, dann kann ich diese im Code nicht doppelt verwenden, jedenfalls nicht mit %Variable% ohne dass ich mit komplizierten Bedingungen gegensteuere. Eine allgemeine Lösung ist das dann nicht mehr. Das Ziel ist es leider die Schale zu finden und nicht sie zu definieren. Ich lasse mich gerne eines Besseren belehren, falls ich auf dem Schlauch stehe und deinen Weg doch nicht verstanden habe? Den Code den du gepostet hast, habe ich etwas geändert. Ich denke das darunterstehende wäre deine Intention gewesen? Damit bekomme ich die Elementtypen der beiden Schalen: n1=node(0,0,0) ! erster Knoten nsel,r,,,n1 esln *get,enum_,elem,,Count *get,temp_,elem,,num,min *do,i,1,enum_ *get,etype_%i%,elem,temp_,attr,type temp_=elnext(temp_) *enddo ---> Somit habe ich die angrenzenden Elementtypen Ich habe jetzt einmal ein wenig rumprobiert und mir selbst einen Contain-Algorithmus gebastelt. Damit wäre es möglich, Arrays zu vergleichen. *dim, nar,,ncount *dim, sar1,, 9 *dim, sar2,, 11 nar(1) = 1, 2, 3, 4, 5, 6, 7, 8, 9 ! Array Knotennummern sar1(1) = 1, 2, 7, 4, 5, 6, 3, 11, 9 ! Array Knotennummern Elementtyp Schale 1 sar2(1) = 1, 2, 11, 4, 5, 6, 7, 10, 9, 3, 8 ! Array Knotennummern Elementtyp Schale 2 *get, nnar, PARM, nar, DIM,X *get, nsar2, PARM, sar2, DIM,X flag=0 *do,j,1,nnar *do,k,1,nsar2 *if,nar(j),eq,sar2(k),then flag = flag + 1 !*CYCLE *endif *enddo *enddo Wenn die Anzahl von Flag gleich ist wie die Anzahl Knoten im Knotenarray dann habe ich meine Schale. ---> Somit bekomme ich den angrenzenden Elementtypen, der alle Knoten enthällt. Was mir immer noch fehlt, ist die dumme Tatsache, dass ich nicht weiss, wie ich abwärts Abfragen erstellen kann. Wie kriege ich die Schnittmenge der Named Selection und der Elementtypen in Abhängigkeit der Elementtypen heraus? Ich denke schon dass es geht, mit Umwegen -> Von jedem Knoten der Named Reference alle umliegenden Elemente abfragen, Filtern nach Elementypen in verschiedene Arrays, dann alle Knoten aus den Elementen ziehen und mit o.g. Funktion vergleichen. Ist das wirklich so gedacht? Ich habe hier Schalenbaugruppen mit 100000 Elementen aufwärts. Das wird mühsamer Code, auch später zum Ändern. Liebe Grüsse
[Diese Nachricht wurde von Robse-Ponte am 24. Mai. 2018 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
|