Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  SIMULIA/ABAQUS
  Cells mit Python auswählen

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:  Cells mit Python auswählen (2657 mal gelesen)
Sigbert98
Mitglied



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

Beiträge: 48
Registriert: 26.02.2009

erstellt am: 29. Nov. 2009 15:54    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 zusammen!

Gibt es mit Python eine Möglichkeit, Zellen automatisch auszuwählen? Ich benötige z.B. alle Zellen, deren x-Koordinate > 500 mm ist.

Vielen Dank und weiterhin ein schönes Wochenende!

Sigbert

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

carsten1983
Mitglied
Doktorand


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

Beiträge: 125
Registriert: 11.10.2007

erstellt am: 30. Nov. 2009 07:47    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 Sigbert98 10 Unities + Antwort hilfreich

Die Frage ist, wie du z.B. die x-Koordinate deiner Zelle festmachst. Du kannst z.B. den Mittelpunkt nehmen:

Code:
mdb.models['Model-1'].rootAssembly.instances['Name'].cells.getSize()[1]

Wenn du das für alle Zellen machst, kennst du alle Mittelpunkte. Auf alle Tupel die du so erhalten hast musst du nun dein Auswahlkriterium anwenden. Danahc kannst du alle Zellen die noch übrig sind, der Reihe nach anwählen mit:

Code:
mdb.models['Unit-Cell'].rootAssembly.instances['Unit-Cell'].cells.findAt(mittelpunkt)


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

Sigbert98
Mitglied



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

Beiträge: 48
Registriert: 26.02.2009

erstellt am: 30. Nov. 2009 23:51    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 Carsten,

vielen Dank für Deine Antwort. Leider habe ich noch ein Problem damit, mein Auswahlkriterium anzuwenden (also z.B. über eine x-Koordinate > 500 mm). Ich versuche das mit dem getSize-Befehl hinzubekommen. Leider scheitere ich daran. Für Deine/Eure Hilfe wäre ich sehr dankbar!

Viele Grüße,
Sigbert

Code:
    Zellen = mdb.models['Modell'].rootAssembly.instances['Instance'].cells
    Liste1 = []
    Liste2 = []

    for i in range(0, 28):
        Zellen[i].getSize()
        Liste1.append(Zellen[i])

    for k in range(len(Liste1)):
        if Liste1[k].getSize()>=((500.0, 0.0, 0.0), ):
            a = mdb.models['Modell'].rootAssembly
            region = (Liste1[k],)
            a.setMeshControls(regions=region, elemShape=TET, technique=FREE)


[Diese Nachricht wurde von Sigbert98 am 30. Nov. 2009 editiert.]

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

carsten1983
Mitglied
Doktorand


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

Beiträge: 125
Registriert: 11.10.2007

erstellt am: 01. Dez. 2009 09: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 Nur für Sigbert98 10 Unities + Antwort hilfreich

Hallo,

Ich denke ein Problem ist, dass Du in Liste1 lediglich eine Kopie von Zellen anlegst. Was Du vermutlich willst, sind jedoch die Koordinaten des Mittelpunkts.

Code:

    Zellen = mdb.models['Modell'].rootAssembly.instances['Instance'].cells
    Liste1 = []
    Liste2 = []
    xKriterium = 500.0

    for zelle in Zellen:
        mittelpunkt = zelle.getSize()[1]        # getSize liefert mehrere Werte zurück
        Liste1.append(mittelpunkt)

    for k in range(len(Liste1)):
        if Liste1[k][0]>=xKriterium:            # mittelpunkt liefert ja drei Koordinaten, die 0. ist x
            a = mdb.models['Modell'].rootAssembly
            region = (Zellen[k],)
            a.setMeshControls(regions=region, elemShape=TET, technique=FREE)


Zusätzlich vergleichst Du bei dem if-Statement Äpfel mit Birnen. Soll heißen: du bekommst mit getSize raus:
(Volumen der Zelle, Mittelpunkt als (x,y,z), und noch irgendwas). Wenn Du das mit dieser Sequence hinter dem if vergleichst, könnte ich mir vorstellen, dass Python überfordert ist. Das ist jedenfalls meine Vermutung.

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

Sigbert98
Mitglied



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

Beiträge: 48
Registriert: 26.02.2009

erstellt am: 01. Dez. 2009 09:51    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 Carsten,

vielen Dank für die schnelle Antwort. Ich habe nun Dein Skript übernommen. Leider meckert Abaqus immer noch bei folgender Zeile

Code:

mittelpunkt = zelle.getSize()[1]

Die Fehlermeldung lautet 'Type error: unsubsricptable object'. Ich vermute, mit der [1] willst Du die x-Koordinate des Mittelpunkts ansteuern?

Herzlichen Dank für Deine Hilfe!
Sigbert

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

carsten1983
Mitglied
Doktorand


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

Beiträge: 125
Registriert: 11.10.2007

erstellt am: 01. Dez. 2009 09:56    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 Sigbert98 10 Unities + Antwort hilfreich

Du hast Recht, der getSize() Befehl liefert als Rückgabewertnur das Volumen und löst gleichzeitig ein print mit den Koordinaten aus. Auf die kann man aber nicht direkt zugreifen. Vielleicht ist das doch nicht der richtige Weg..

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

carsten1983
Mitglied
Doktorand


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

Beiträge: 125
Registriert: 11.10.2007

erstellt am: 01. Dez. 2009 10:47    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 Sigbert98 10 Unities + Antwort hilfreich

Code:
mdb.models['Modell'].rootAssembly.instances['Instance'].cells.getVertices()

Liefert eine Liste der Punkt, die zu der Zelle gehören.
Mit
Code:
mdb.models['Unit-Cell'].rootAssembly.instances['Unit-Cell'].vertices[i].pointOn[0]

kannst Du die Koordinaten der Vertices bekommen.

Wenn Du jetzt also mit dem 2. Befehl alle Punkte, die der erste Befehl auswirft, bezüglich ihrer Koordinaten überprüfst, hast du die gesuchte Information.

Ich denke das müsste jetzt aber wirklich gehen 

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

Mustaine
Ehrenmitglied V.I.P. h.c.



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

Beiträge: 3554
Registriert: 04.08.2005

Abaqus

erstellt am: 01. Dez. 2009 11: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 Nur für Sigbert98 10 Unities + Antwort hilfreich

Code:

from abaqus import *
from abaqusConstants import *


modelName = session.sessionState[session.currentViewportName]['modelName']

m=mdb.models[modelName]
r = m.rootAssembly
i = r.instances['Part-1-1']

Liste1 = []

xKriterium = 18.0


for zelle in i.cells:          # ueber alle Zellen der Instance zaehlen
    v=zelle.getVertices()      # Liste mit Eckpunkten ermitteln
    for vertex in v:            # ueber alle Eckpunkte zaehlen
        coords=i.vertices[vertex].pointOn      # Koordinaten des Eckpunktes ermitteln
        if coords[0][0]>xKriterium:            # Kriterium der x-Koordinate kontrollieren
            if Liste1.count(zelle.index)<1:    # ist Zelle schon in Liste
                Liste1.append(zelle.index)      # falls nein, dann jetzt
           
#print Liste1

for k in Liste1:                                # ueber die Zellen in der Liste zaehlen
    region=(i.cells[k],)                        # Zelle wird region
    r.setMeshControls(regions=region, elemShape=TET, technique=FREE)    # region wird angesprochen


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

Sigbert98
Mitglied



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

Beiträge: 48
Registriert: 26.02.2009

erstellt am: 02. Dez. 2009 07:19    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 Mustaine,

vielen Dank für Deine Hilfe. In meinem Modell scheint das Skript aber noch nicht ganz zu laufen. In der Cae wird lediglich "[81]" ausgegeben, die Elementierung wird jedoch nicht umgestellt.

Hast Du evtl. noch eine Idee, woran das liegen könnte?

Herzlichen Dank und einen schönen Tag!
Sigbert

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

Mustaine
Ehrenmitglied V.I.P. h.c.



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

Beiträge: 3554
Registriert: 04.08.2005

Abaqus

erstellt am: 05. Dez. 2009 14:15    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 Sigbert98 10 Unities + Antwort hilfreich

Hast du was geändert am Script? Bei mir funktioniert es nämlich problemlos.

Der Instancename im Script passt zu deinem?

Hänge ggf. deine cae-Datei hier an.

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

Sigbert98
Mitglied



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

Beiträge: 48
Registriert: 26.02.2009

erstellt am: 07. Dez. 2009 09:21    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 Mustaine,

Du hattest Recht! Ich habe das Skript in die Makro-Datei aufgenommen. Dort lief es nicht. Als eingeständiges Python-Skript läuft es aber super durch.

Vielen Dank dafür und eine schöne Woche!

Sigbert

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