Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  SIMULIA/ABAQUS
  Python Zugriff auf sets in Assembly

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
Autor Thema:  Python Zugriff auf sets in Assembly (2463 mal gelesen)
schneitzmaster
Mitglied
Maschbau-Ingenieur


Sehen Sie sich das Profil von schneitzmaster an!   Senden Sie eine Private Message an schneitzmaster  Schreiben Sie einen Gästebucheintrag für schneitzmaster

Beiträge: 12
Registriert: 09.01.2013

erstellt am: 09. Jan. 2013 16:08    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo Leute,

ich erstelle meine Modelle mit ABAQUS Python und möchte in der Assembly ein Set erstellen, mit dem ich nach erfolgter Rechnung Auswertungen im odb-file durch führen möchte.
Dieses Set soll alle Elemente mit der zugewiesenen Section A enthalten.
Wie kann ich das anstellen?

Bisher habe ich lediglich die sectionassignments einer Assembly aber ohne geometrische bzw. elementweise Zuordnung gefunden.
Die Ergebnisse der bisher gefundenen Befehle sind:

mdb.models['myModel'].rootAssembly.instances['myInstance'].part.sectionAssignments[0].sectionName
'A'

mdb.models['myModel'].rootAssembly.instances['myInstance'].part.sectionAssignments[0].region
('_PickedSet2_#4', 'A', 1, 1, 1)

Mit diesen Informationen kann ich leider nicht das gewünschte Set erzeugen.
Hat einer von euch vielleicht eine Möglichkeit von der Assembly ein Set das mit der section A verknüpft ist zu erzeugen?
Irgendwie muss das ja gehen denn man kann sich ja auch in der Assembly die verschiedenen der Geometrie zugeordneten Materialien farbig anzeigen lassen.

Vielen Dank für die Hilfe im voraus.
schneitzmaster

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Nicksen
Mitglied
wissenschaftlicher Mitarbeiter


Sehen Sie sich das Profil von Nicksen an!   Senden Sie eine Private Message an Nicksen  Schreiben Sie einen Gästebucheintrag für Nicksen

Beiträge: 239
Registriert: 04.05.2007

erstellt am: 10. Jan. 2013 12:13    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für schneitzmaster 10 Unities + Antwort hilfreich

Moin schneitz,

das scheint in der Tat ein Problem darzustellen. Beim Ausprobieren habe ich mir per Klickerei ein kleines Modell mit zwei Sections erstellt und dann eben diese Elementseterstellung versucht.

Ebenfalls ohne Erfolg. Mir scheint, du willst alles per Skript machen und somit hast du die Section-Erstellung, Materialzuweisung und Section-Zuweisung auch per Skript gelöst. Wenn man das klickt, ist mir aufgefallen, dass Abaqus interne Sets erzeugt, auf die man mit ...

mdb.models['myModel'].rootAssembly.allInternalSets.keys()

zugreifen kann. Hier lässt sich leider nicht erkennen um welche Section es sich handelt. Aber vllt. ist es möglich, die Elemente beim Vernetzen in den Sections zu unterscheiden.

Beispiel: Section A vernetzt du mit Elementen OHNE reduced integration. Section B MIT reduced integration.

Aus den internal sets holst du dir die zugehörigen Elemente und fragst für diese den "type" ab. Section A wird dann zB C3D8 Elemente beinhalten und B halt "C3D8R". So weißt du welche Section welche ist und speicherst die Liste mit den Elementen in ein anderes Set.

Für die Seterstellung brauchst du ein Mesh-Objekt, welches für parts und instances leicht zu erstellen ist. Leider habe ich auch keine Möglichkeit gefunden, dies für Sektionen durchzuführen. Über eine Routine bin ich gestolpert: "myModel.rootAssembly.instances[myInstance].part.ElementSetFromKeyword(", aber leider konnte ich in der Dokumentation von Vers.6.10 nichts dazu finden. Ich weiß also kein Keyword und google half da auch wenig weiter.

Die "getSequenceFromMask" scheint ziemlich mächtig zu sein, aber dazu konnte ich auch nichts wirklich aufschlussreiches finden.

Tut mir leid. Aber eventuell gibt das hier neue Ansatzpunkte. Wenn du das gelöst hast, wäre es sehr nett, wenn du uns an der Methode teilhaben lassen könntest.

bestes Gelingen
mfg NxxN

------------------
===============
==  Dingsen  ==
===============

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

schneitzmaster
Mitglied
Maschbau-Ingenieur


Sehen Sie sich das Profil von schneitzmaster an!   Senden Sie eine Private Message an schneitzmaster  Schreiben Sie einen Gästebucheintrag für schneitzmaster

Beiträge: 12
Registriert: 09.01.2013

erstellt am: 10. Jan. 2013 12:18    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

HiNicksen,
vielen Dank für die ausführlichen Ausführungen!
Die Idee mit den internen Sets klingt vielversprechend da ja die Eingabe des Befehls:

mdb.models['myModel'].rootAssembly.instances['myInstance'].part.sectionAssignments[0].region
('_PickedSet2_#4', 'A', 1, 1, 1)

auch das interne Set '_PickedSet2_#4' enthält.
Ich werde mich mal dran versuchen und falls es eine Lösung gibt sie hier posten.

Danke noch mal für die Mühen
Mfg
Schneitz

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Nicksen
Mitglied
wissenschaftlicher Mitarbeiter


Sehen Sie sich das Profil von Nicksen an!   Senden Sie eine Private Message an Nicksen  Schreiben Sie einen Gästebucheintrag für Nicksen

Beiträge: 239
Registriert: 04.05.2007

erstellt am: 10. Jan. 2013 12:34    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für schneitzmaster 10 Unities + Antwort hilfreich

Wenn du auf die Elemente in dem Set zugreifst, kannst du über die labels an den Typ kommen. Darüber würde ich als "Krückenlösung" die Sets definieren.

Vielleicht findet sich hier ja noch ein Kenner, der den eleganteren Weg kennt.

mfg

------------------
===============
==  Dingsen  ==
===============

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

schneitzmaster
Mitglied
Maschbau-Ingenieur


Sehen Sie sich das Profil von schneitzmaster an!   Senden Sie eine Private Message an schneitzmaster  Schreiben Sie einen Gästebucheintrag für schneitzmaster

Beiträge: 12
Registriert: 09.01.2013

erstellt am: 17. Jan. 2013 09:38    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hi Nicksen,
ich habe jetzt eine "halbwegs" elegante Methode gefunden die Sets zu definieren. Der Trick dabei war nicht in der Assembly zu vernetzen sondern im Part-Modul. Dadurch kann man dann auf die Sectionassignments und auf die Internalsets zugreifen und diese auch unterscheiden.
Dannach MUSS man mit dem vernetzten Part eine neue Assembly erzeugen (wird einfach das Partvernetzt erkennt ABAQUS nicht immer automatisch, dass die Assembly jetzt vernetzt wurde, ist eine komische Geschichte).
In dieser neuen Assembly können dann die Elemente aus dem part übertragen werden. Vorrausstezung dafür ist, dass die Elementlabels im Part-Modul die selben wie im Assembly-Modul sind (ich hoffe das ist immer so).
Na ja hier mal mein Pseudo-code:

del mdb.models['myModel'].rootAssembly.features['myInstance_trial'] # löschen der Assembly (es befindet sich aber das entsprechende Part im Part-Modul)

mdb.models['myModel'].parts['my_assembled_part'].generateMesh()

myPart = mdb.models['myModel'].parts['my_assembled_part']

for i in range(len(myPart.sectionAssignments)):
      myPart.Set(elements=myPart.sectionAssignments[i].getSet().elements,  name=myPart.sectionAssignments[i].sectionName+'_ELEM')

# jetzt gibt es die Sets bzgl. der Sections im Part-Modul

myNew_Instance = mdb.models['myModel'].rootAssembly.Instance(dependent=ON, name='myNew_inst', part=myPart) # neue Instance in Assembly eingefügt damit "immer" ABAQUS merkt das auf dem Partmodul vernetzt wird

sect1_elem_seq = []      # Liste inzialisieren um Elemente der section1 zu sammeln
for element in myPart.sets[myPart.sectionAssignments[i].sectionName+'_ELEM'].elements:
      sect1_elem_seq.append( myPart.elements[element.label-1:element.label] )

# jetzt ist eine Liste erzeugt mit der man nun in der Assembly das entsprechende Set definieren kann

mdb.models['myModel'].rootAssembly.Set(name='SECT1_ElEM_ASS', elements=sect1_elem_seq)

Ich hoffe das ist einiger Maßen verständlich.
Leider gibt es wohl keinen vernünftigen weg in der Assembly an die Elemente der einzelnen Sections heranzukommen. Ich glaube das liegt daran, dass die Section nur im Part-Modul definiert werden.
Vielen Dank noch mal für deine Hilfe
Schneitz

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Anzeige.:

Anzeige: (Infos zum Werbeplatz >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2023 CAD.de | Impressum | Datenschutz