Autor
|
Thema: SPOS/SNEG bei 3D-Elementen? (2444 / mal gelesen)
|
DDsDDe Mitglied
Beiträge: 102 Registriert: 04.02.2009
|
erstellt am: 01. Mrz. 2018 13:34 <-- editieren / zitieren --> Unities abgeben:
Hallo miteinander! Ich arbeite an einem Modell mit Tie-constraints und erhalte folgende Fehlermeldung: Code: ***ERROR: UNDERLYING ELEMENT 6 INSTANCE ENDBEAM-1 CAN NOT HAVE SPOS AS A FACE IDENTIFIER
Info zum selben Element :
Code: Element: ENDBEAM-1.6 Type: C3D8R Material: C24 Section: ALL.Section-ASSEMBLY_ENDBEAM-1_ALL, Homogeneous Solid Section, Thickness = 0 Connect: 95, 6, 5, 96, 91, 2, 1, 92 Results: Integration Point values not available
Ich kenne SPOS (und SNEG) nur wenn Schalenelemente verwendet werden, in meinem Modell sind aber nur 3D Elemente verwendet. Im Forum habe ich unter http://ww3.cad.de/foren/ubb/Forum254/HTML/001578.shtml dieses bestätigt gefunden.
Falls es damit zu tun hat: ich erzeuge die Surface-sets mit python unter Verwendung einer bounding box-Abfrage. Gibt es hier eine Unterscheidung zwischen und muss ich die Box eventuell von "aussen nach innen" erzeugen? Ueber einen Ausweg wuerde ich ich freuen! lg! DDsDDe ------------------ -- nix zu sehen Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Mustaine Ehrenmitglied V.I.P. h.c.
Beiträge: 3554 Registriert: 04.08.2005 Abaqus
|
erstellt am: 01. Mrz. 2018 16:59 <-- editieren / zitieren --> Unities abgeben: Nur für DDsDDe
|
DDsDDe Mitglied
Beiträge: 102 Registriert: 04.02.2009
|
erstellt am: 02. Mrz. 2018 09:35 <-- editieren / zitieren --> Unities abgeben:
Hallo! Ich lasse eine Schleife ueber den Part laufen da ich an mehreren Stellen eine ähnliche Surface generiere. Der Teil zur Surface sieht aber so aus: Code:
# 1 die Koordinaten der Box (je ein mm grösser als die Kante der Partitionen sind) current_surface_bounding = (sidebeam_width - 1.0, 0.0 - 1.0, pos_a-1.0, sidebeam_width+ 1.0, sidebeam_height + 1.0, pos_b+1.0)# 2 der Name des derzeitigen Parts current_part = mdb.models[name_model].parts[part_name] # 3 die Edges des derzeitigen Parts current_edges = current_part.edges # 4 die Edges die innerhalb der Bounding Box liegen edges = current_edges.getByBoundingBox(current_surface_bounding[0], current_surface_bounding[1], current_surface_bounding[2], current_surface_bounding[3], current_surface_bounding[4], current_surface_bounding[5]) # 5 der Name der Surface wird definiert current_surface_name = name_partition.__add__('-').__add__(str(iterator)) # 6 die eigentliche surface wird kreiert current_part.Surface(side1Edges=edges, name=current_surface_name)
Wichtig sind wahrscheinlich nur die Punkte 1, 3, 4 und 6. In dem Beispiel werden die Surfaces ueber die Edges definiert. Ist das "sauber" (bin kein Profi im Abaqus-python-script-Befehls-Umfeld)? Lg! ------------------ -- nix zu sehen Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Mustaine Ehrenmitglied V.I.P. h.c.
Beiträge: 3554 Registriert: 04.08.2005 Abaqus
|
erstellt am: 02. Mrz. 2018 14:44 <-- editieren / zitieren --> Unities abgeben: Nur für DDsDDe
Um was geht es hier? Sind das Wire oder Kanten von Flächen oder Solids? Oder was anderes? Hast du schonmal in der GUI eine Surface mit den Kanten erstellt und geschaut was in die .rpy geschrieben wird? Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
DDsDDe Mitglied
Beiträge: 102 Registriert: 04.02.2009
|
erstellt am: 02. Mrz. 2018 16:37 <-- editieren / zitieren --> Unities abgeben:
Hi! Es sind Solids und die Edges werden ausgewählt. In CAE wird die so generierte Surface angezeigt, ich sehe keinen Unterschied zu einer Surface, die ich zB direkt in CAE erzeugt habe. Ich werde versuchen, ein Minimi-Beispiel zusammen zu stellen, bei dem diese Surface durch das Script generiert wird, und danach hochladen. Komme nun leider nicht mehr dazu.
Danke jedenfalls fuer die Hilfe/Interesse! DDsDDe ------------------ -- nix zu sehen Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
DDsDDe Mitglied
Beiträge: 102 Registriert: 04.02.2009
|
erstellt am: 05. Mrz. 2018 08:54 <-- editieren / zitieren --> Unities abgeben:
Hallo! Hier das Beispiel von dem ich letzte Woche geschrieben hatte (bitte das .txt entfernen). Der Part "sidebeam" hat zwei Surfaces definiert, wobei einmal die oben beschriebene Variante verwendet wurde (also ueber edges), zum zweiten ueber faces (oben nicht beschrieben). Folgende Befehle kreieren diese Surface(s):
Code: # 1 - Surface_from_Edges current_surface_bounding = (44.0, -1.0, 1199.0, 46.0, 221.0, 1246.0) current_edges = mdb.models['basis_v1'].parts['sidebeam'].edges.getByBoundingBox(current_surface_bounding[0], current_surface_bounding[1], current_surface_bounding[2], current_surface_bounding[3], current_surface_bounding[4], current_surface_bounding[5]) mdb.models['basis_v1'].parts['sidebeam'].Surface(side1Edges=current_edges, name='Surface_from_Edges')
Code: # 2 - Surface from Faces current_surface_bounding = (44.0, -1.0, 1199.0, 46.0, 221.0, 1246.0) current_faces = mdb.models['basis_v1'].parts['sidebeam'].faces.getByBoundingBox(current_surface_bounding[0], current_surface_bounding[1], current_surface_bounding[2], current_surface_bounding[3], current_surface_bounding[4], current_surface_bounding[5]) mdb.models['basis_v1'].parts['sidebeam'].Surface(side1Faces=current_faces, name='Surface_from_Faces')
Assembly, Meshing und Loads sind gemacht, geben prinzipiell aber wenig Sinn. Der Job "basis_v1" kann aber direkt gestartet werden. Das Modell, wie ich es hochgeladen habe, bringt die Fehlermeldung "UNDERLYING ELEMENT ... INSTANCE ... CAN NOT HAVE SPOS AS A FACE IDENTIFIER". Wenn die Surface "Surface_from_Edges" löscht, läuft der Job aber durch. Was ich eben nicht verstehe ist, warum die erste Variante nicht funktioniert. Im Handbuch [1] steht
Zitat: On three-dimensional or two-dimensional or axisymmetric edges, you can use the following arguments: side1Edges side2Edges
und wenn ich das richtig deute so sollte diese Variante 1 eigentlich funktionieren? Jedenfalls, die Definition ueber Faces funktioniert (Variante 2), ich werde mein Script entsprechend umschreiben. Trotzdem bleibt das Rätseln ... lg! DDsDDe
[1] http://abaqus.software.polimi.it/v6.14/books/ker/default.htm?startat=pt01ch45pyo05.html
------------------ -- nix zu sehen Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Mustaine Ehrenmitglied V.I.P. h.c.
Beiträge: 3554 Registriert: 04.08.2005 Abaqus
|
erstellt am: 05. Mrz. 2018 09:58 <-- editieren / zitieren --> Unities abgeben: Nur für DDsDDe
|
DDsDDe Mitglied
Beiträge: 102 Registriert: 04.02.2009
|
erstellt am: 05. Mrz. 2018 11:24 <-- editieren / zitieren --> Unities abgeben:
Ich brauche die Surface, wie diese erstellt wird, ist erstmals egal. In meinem Fall die Surface, die von den Edges eingeschlossen wird, und so habe ich mdb.models['basis_v1'].parts['sidebeam'].Surface(side1Edges=current_edges, name='Surface_from_Edges') verstanden. Sollte dies nicht so sein, was hat die Möglichkeit, Edges zu einer Surface zusammenzufuehren, fuer einen Sinn? ------------------ -- nix zu sehen Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Mustaine Ehrenmitglied V.I.P. h.c.
Beiträge: 3554 Registriert: 04.08.2005 Abaqus
|
erstellt am: 05. Mrz. 2018 11:56 <-- editieren / zitieren --> Unities abgeben: Nur für DDsDDe
Ich glaube du hast da einen kleinen Denkfehler. Wenn du die Kanten in eine Surface packst, ergibt sich daraus nicht die Fläche die sie einschließen. Bei deinem Versuch wären die Kanten die Surface. Das macht bei Solids i.d.R. keinen Sinn. Du möchtest eine geometrische Fläche identifizieren und diese dann für irgendwas nutzen oder in eine Surface überführen. Wenn du die Fläche brauchst, dann gibt es mehrere Methoden diese zu bekommen (findAt, getClosest, boundingBox, etc.). Wenn du die Kanten trotzdem nutzen möchtest um an die Fläche zu kommen, brauchst du die Kanten nicht in eine Surface packen. Entweder du verwendest deren ID oder du legst sie in einem normalen Set ab. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
DDsDDe Mitglied
Beiträge: 102 Registriert: 04.02.2009
|
erstellt am: 05. Mrz. 2018 12:37 <-- editieren / zitieren --> Unities abgeben:
Zitat: Original erstellt von Mustaine: Ich glaube du hast da einen kleinen Denkfehler. Wenn du die Kanten in eine Surface packst, ergibt sich daraus nicht die Fläche die sie einschließen. Bei deinem Versuch wären die Kanten die Surface. Das macht bei Solids i.d.R. keinen Sinn.
Genau das habe ich durch die Diskussion mitbekommen ;). Variante 2 mit den Faces ist natuerlich sinnvoller. Und funktioniert auch!
Zitat: Original erstellt von Mustaine: Du möchtest eine geometrische Fläche identifizieren und diese dann für irgendwas nutzen oder in eine Surface überführen. Wenn du die Fläche brauchst, dann gibt es mehrere Methoden diese zu bekommen (findAt, getClosest, boundingBox, etc.). Wenn du die Kanten trotzdem nutzen möchtest um an die Fläche zu kommen, brauchst du die Kanten nicht in eine Surface packen. Entweder du verwendest deren ID oder du legst sie in einem normalen Set ab.
Wie ich aus meinen Edges die Surface bekomme, ist mir noch immer nicht ganz klar. Nachdem die andere Variante aber funktioniert, mache ich mir darueber Gedanken, wenn es soweit ist. Mustaine, vielen Dank jedenfalls fuer die Diskussion und den "Schubser" in die richtige Richtung! DDsDDe
------------------ -- nix zu sehen Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
|