Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  SIMULIA/ABAQUS
  OOP Abaqus Klassen Problem

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:  OOP Abaqus Klassen Problem (917 / mal gelesen)
Ferrago
Mitglied



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

Beiträge: 16
Registriert: 25.11.2019

erstellt am: 19. Dez. 2019 11:52    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,

ich habe eine Frage bezüglich des Aufbaus eines Skripts bzw. der Klassen für Abaqus.

Ich analysiere ein Bauteil das aus zwei Einzelteilen zusammengesetzt ist. Dafür habe ich zwei Klassen angelegt, in denen jeweils die Einzelteil in Methoden erzeugt werden. Hier das Skript von einem der beiden Bauteile:

    def gen_geometry(self):

            # create part 1: Plate
            #----------------------------------------------------------------------
            # creating a constrained sketch object for the plate
            cltPlateProfileSketch = self._model.ConstrainedSketch(name = self._name, sheetSize = 20)

            # drawing a rectangle on the sketch plane
            cltPlateProfileSketch.rectangle(point1 = (0.0, 0.0), point2 = (PLATE_WIDTH, PLATE_LENGTH))

            # creating a Part object and placing it in the parts repository
            cltPlatePart = self._model.Part(name = self._name, dimensionality =THREE_D, type = DEFORMABLE_BODY)

            # creating a Feature object
            cltPlatePart.BaseSolidExtrude(sketch = cltPlateProfileSketch, depth = FLOOR_HIGHT)


In der Assembly möchte ich dann das eine Bauteil (corePart) aus dem anderen (cltPlatePart) herausschneiden. Für diesen Vorgang das dazugehörige Skript:


      def core_cutout(self):

    # hier wird die assembly erzeugt
            connAssembly = self._model.rootAssembly

            inst_clt = connAssembly.Instance(name = self._name, part = cltPlatePart, dependent = ON)

            inst_lvl = connAssembly.Instance(name = self._name, part = corePart, dependent = ON)

    # Verschiebung des corePart
            inst_lvl.translate(vector = (PLATE_WIDTH / 2 - (INNER_CORE_WIDTH / 2 + CUTOUT_WIDTH), 0, 0))

    #Ausschneiden des corePart aus dem cltPlatePart
            connAssembly.InstanceFromBooleanCut(name = 'Cutted Plate', instanceToBeCut = inst_clt,
            cuttingInstances = (inst_lvl, ), originalInstances = DELETE)

Da die zwei Einzelteile cltPlatePart und corePart in den dazugehörigen Klassen definiert worden, erhalte ich folgenden Error:

"global name 'cltPlatePart' is not defined"

Noch als Zusatz:  In einer außerhalb der Klassen erzeugten Funktion werden dann die in den Klassen definierten Methoden ausgeführt:

    def compute_global_model(model):

        # create clt plate
        clt = cltPlate(model = model, name = "CLT-Plate", pos = (0, 0, 0))
        clt.set_geom_params(PLATE_LENGTH, PLATE_WIDTH, FLOOR_HIGHT, LAYER_DEPTH, N_LAYERS)
        clt.gen_geometry()


Nun meine Fragen....

Wie kann ich eine Funktionen außerhalb einer Klasse ausführen und dabei auf die in den Klassen definierten Objekte zugreifen? Oder ist der Aufbau an sich schon falsch/ungeeignet?


Ich hoffe ich habe das Problem ausführlich genug erklärt um es zu verstehen.


Sorry falls der Code hier nicht gescheit angezeigt wird und ich Englisch und Deutsch gemischt habe, hoffe das ist trotzdem alles verständlich.

Vielen Dank schon mal für eure Bemühungen!


Gruß Ferrago

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: 02. Jan. 2020 11:11    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 Ferrago 10 Unities + Antwort hilfreich

Ich habe noch nie mit Klassen in Abaqus-Skripten gearbeitet. Ich wüsste auch nicht welchen Grund es dafür geben sollte. Insofern kann ich dir  deine Fragen nicht beantworten.

Funktionen kann man definieren. Dabei muss man halt auf die Namensräume aufpassen.

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

Airfox
Mitglied
Student


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

Beiträge: 96
Registriert: 16.09.2015

erstellt am: 06. Jan. 2020 18:04    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 Ferrago 10 Unities + Antwort hilfreich

Hallo Ferrago,

also sofern ich das richtig verstande haben verwendest du den Python 2.7 Code, welches du als Abaqusskript mit CAE ausführst, richtig?
Der Code ist objektorientiert, nehme ich mal an. .....

"Wie kann ich eine Funktionen außerhalb einer Klasse ausführen und dabei auf die in den Klassen definierten Objekte zugreifen?"

Generell ist es ja so das du mit:
def foo(x, y):
    z = y*x
    print(z)
dir eine Funktion außerhalb einer Klasse basteln kannst. Aufrufen kannst du sie über:
foo(17,4)
Ich nehme mal an soetwas einfaches hast du schon probiert? Ich habe hier mal ein minibeispiel für das Verständnis gezaubert, kannst du so direkt kopieren und einfügen:
# Definiert eine Funktion
def foo(obj):
  print(obj.zwischenspeicher)

# Erstelle eine Klasse mit Konstruktor
class meineKlasse:
 
  def __init__(self):
    self.variable="foo"
    self.zwischenspeicher = int()
    print("Inhalt des Konstruktors:")
    print(self.variable)
 
  def superFoo(self,g,k):
    #print(self.variable)
    self.zwischenspeicher = g*k
    print(self.zwischenspeicher)

  def methode1(self,par1,par2):
    pass

  def methode2(self,par1='a',par2=3):
    pass

# Erstll ein Objekt meiner Klasse
hans = meineKlasse()

# Führe eine Methode der Klasse aus
hans.superFoo(5,6)

# Führe eine Funktion außerhalb der Klasse aus
# und gebe dieser Funktion das Objekt
foo(hans)

Also ja, es ist möglich einer Funktion welche außerhalb einer Klasse geschrieben ist, ein Objekt zu geben. Die Funktion kann auf Werte in dem Objekt zugreifen und diese auch verändern. Wenn du innerhalb einer Klasse auch Objekte einer anderen Klasse hast, sollte das auch möglich sein diese zu bearbeiten. Du könntest testweise das Beispiel oben ja durch eine weitere Klasse erweitern und innerhalb der ersten ein Objekt der zweiten Klasse erstellen.   

Ob das ganze jetzt bei Abaqus auch geht kann ich dir so direkt nicht sagen, dafür müsste man mal ein Minibeispiel hochladen. 

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