Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  SIMULIA/ABAQUS
  Abaqus Coupling mittels Skript

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
  
CATIA V5 Grundkurs | Einsteiger - 5 Std. 15 Min
  
KISTERS 3DViewStation: 3D-Heatmaps für aussagekräftige Machbarkeitsanalysen, eine Pressemitteilung
Autor Thema:  Abaqus Coupling mittels Skript (545 / mal gelesen)
anfänger321
Mitglied
Student

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

Beiträge: 7
Registriert: 25.12.2023

Abaqus 2019

erstellt am: 29. Dez. 2023 16:35    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


Skript.txt

 
Hallo zusammen,

im Zuge meiner Masterarbeit führe ich Knickversuche in Abaqus an Verbundglasstützen durch. Hierfür habe ich einen Skript erstellt um die Versuche automatisiert durchzuführen. Zuerst erstelle ich ein Part. Mittels datum Planes und Partition werden die Stützen in Glas und Folie unterteilt. Das Skirpt soll für n Glasscheiben und n-1 Folien anwendbar sein. Für den späteren Gebrauch erstelle ich in den Scheibenmitten partion faces. Zur Lasteinleitung und für die Lagerung werden ober- und unterhalb RP erstellt. Nur habe ich nun Probleme beim Coupling der RP und der Partiton Faces in den Scheibenmitten. In meinem ersten Skript für 2-fach Glasstützen hat das ohne Probleme funktioniert. Mithilfe des Macro Managers konnte ich die Sets der RPs und die Surfaces einfach ermitteln. Nun habe ich das Problem das dieselben Schritte für n Scheiben funktionieren soll. Das soll dann mit einer For Schleife laufen. Ich bin absoluter Neuling in Sachen Abaqus und bis jetzt mit Try und Error so weit gekommen. Leider komme ich nicht mehr voran und mein Betreuer hat absolut keine Idee warum seine For-Schleife nicht funktioniert.

Könnt ihr mir da vielleicht weiterhelfen. Vielleicht seht ihr ja den Grund warum die Schleife nicht funktioniert oder habt einen anderen Ansatz. Wäre für jede Hilfe dankbar. Im Anhang findet ihr das Skript. Gerne versuche ich eure Fragen bei Unklarheiten zu beantworten. 

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: 3585
Registriert: 04.08.2005

Abaqus

erstellt am: 31. Dez. 2023 11: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 Nur für anfänger321 10 Unities + Antwort hilfreich

Wenn ich das richtig sehe, suchst du mit der BoundingBox im Part, möchtest dann aber das Set auf Assembly-Level erstellen. Das passt nicht zusammen.

Außerdem empfehle ich mal ein print nach der BoundingBox-Suche einzubauen, um zu sehen was du bekommst.

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

anfänger321
Mitglied
Student

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

Beiträge: 7
Registriert: 25.12.2023

Abaqus 2019

erstellt am: 01. Jan. 2024 15: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

Hallo Mustaine,

erstmal vielen Dank für deine Antwort. MIt der Funktion findAt() hat er den Punkt nicht finden können bzw. an der Stelle kein Node gefunden, daher der Versuch mit BoundingBox. Ich verstehe aber nicht was du meinst mit Set auf Assembly-Level erstellen meinst😅. So wie ich den Code verstehe
-nimmt er mein Ref Point "Loslager", erstellt daraus ein Set und definiert es als region1
-danach sucht er das erste edge an der Stelle: breite/2,hoehe,dglas[0]/2 (das ist meine partition face in der Mitte meiner ersten Scheibe)
-dann beginnt die for schleife von 1 bis Anzahl Werte dglas
-danach soll er als Schleife die nächsten Partition faces finden
-Wenn ich die Koordinaten für edgeCurr ausgebe bekomme ich folgende Box ausgegeben: (-1,1999,14,52,251,2001,16,52)
-innerhalb dieser Box ist auch meine zweite partition face: (125,2000,15,52)
-für i=2 sind die Koordinaten in der Box ebenfalls richtig
-dann wird die region2 definiert. Warum wird edgesTop1 nun als region2 definiert. Müsste nicht edgeCurr als region2 definiert werden
-im Anschluss soll dan meine region1 (also RefPoint) mit meiner region2 (die Scheibenmitten) gecoupelt werden.

Danke

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: 3585
Registriert: 04.08.2005

Abaqus

erstellt am: 02. Jan. 2024 10:02    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 anfänger321 10 Unities + Antwort hilfreich

Wenn ich dein Skript ausführe, kommt der Fehler in Zeile 222. Das ist folgender for-Loop:
Code:

for i in range(1,len(dglas)):
    j=i*2
    p = mdb.models[modelname].parts[partname]
    s = p.edges
    edgeCurr = s.getByBoundingBox(-1,hoehe-1,datumDicken[j]-dglas[i]/2-1,breite+1,hoehe+1,datumDicken[j]-dglas[i]/2+1)
    a.Set(edges=edgeCurr, name='slaveTop'+str(i+1))

Wie man sehen kann, gehst du mit p ans Part und dann damit weiter zur BoundingBox. Das Set erstellst du dann aber mit a.Set(), also mit Referenz aufs Assembly.

Wenn ich das Set auch auf Part-Level erstelle und die BoundingBox-Ergebnisse richtig nutze, läuft der loop fehlerfrei durch.

Code:

for i in range(1,len(dglas)):
    j=i*2
    p = mdb.models[modelname].parts[partname]
    s = p.edges
    edgeCurr = s.getByBoundingBox(-1,hoehe-1,datumDicken[j]-dglas[i]/2-1,breite+1,hoehe+1,datumDicken[j]-dglas[i]/2+1)
    idx = edgeCurr[0].index
    p.Set(edges=s[idx:idx+1], name='slaveTop'+str(i+1))

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

anfänger321
Mitglied
Student

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

Beiträge: 7
Registriert: 25.12.2023

Abaqus 2019

erstellt am: 02. Jan. 2024 14: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,

vielen Dank für die Antwort und Erklräung. Jetzt verstehe ich auch was du mit Assembly Set meinst. Vorher waren meine Sets unter dem Reiter Assemby zu finden nun sind sie unter dem Reiter Parts zusammen mit den anderen Sets. Ich bekomme jedoch immer noch nicht die Constraints hin. Im Grunde genommen hast du jetzt statt ein Assembxl Set ein Part Set erstellt und mein edgeCurr als idx definiert. Als Set erhalte ich dann slaveTop2 und slaveTop3. In diesem Fall müsste ich doch mein edgesTop1 ebenfalls als Part Set ertsellen oder? Denn ich will ja mein RefPoint mit allen 3 Scheibenmitten (bzw. n-Scheibenmitten) verbinden. So sieht mien Code nun aus:

Code:
#Coupling Reference Point mit Glasmitten oben

refPoints1=(idRF1, )
region1=p.Set(referencePoints=refPoints1, name='Loslager+Lastpunkt')

edgesTop1 = p.edges.findAt((breite/2,hoehe,dglas[0]/2),)
for i in range(1,len(dglas)):
    j=i*2
    p = mdb.models[modelname].parts[partname]
    s = p.edges
    edgeCurr = s.getByBoundingBox(-1,hoehe-1,datumDicken[j]-dglas[i]/2-1,breite+1,hoehe+1,datumDicken[j]-dglas[i]/2+1)
    idx = edgeCurr[0].index
    p.Set(edges=s[idx:idx+1], name='slaveTop'+str(i+1))
    region2 = p.Set(edges=idx, name='slaveTop')
   
    mdb.models[modelname].Coupling(name='Loslager+Last',
    controlPoint=region1, surface=region2, influenceRadius=WHOLE_SURFACE,
    couplingType=KINEMATIC, localCsys=None, u1=ON, u2=ON, u3=ON, ur1=ON,
    ur2=ON, ur3=ON)


Ist es auch richtig, dass mein mdb.models.Coupling eingerückt ist. Ansonsten erhalte ich einen syntax Fehler.
Abaqus will von mir zum Coupling eine region, daher erstelle ich die region2 und will idx bzw. edgeCurr als region2 definieren. Ist der Ansatz korrekt oder liege ich damit komplett falsch?

Danke nochmals

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: 3585
Registriert: 04.08.2005

Abaqus

erstellt am: 02. Jan. 2024 15:31    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 anfänger321 10 Unities + Antwort hilfreich

Der Reihe nach:
- Was ich mit meinem Beispiel nur zeigen wollte ist, dass du nicht Objekte aus dem Part (Edges, ...) für die Erstellung von Sets im Assembly nehmen kannst.
- Couplings werden immer auf Assembly-Level erstellt, insofern müssen die verwendeten Regionen Assembly-Regionen oder -Sets sein.
- Entweder du erstellst die Sets am Assembly (also Instanzen) oder du verwendest die vererbten* Sets aus dem Part.
- Wenn du nur ein Coupling haben möchtest, solltest du es nicht im Loop erstellen.
- Wenn du mehrere Sets als eine Region in einem Coupling haben möchtest, dann müsstest du entweder die Sets zu einem gemeinsamen Set verschmelzen (merge) oder die Inhalte der Sets auslesen und als Region für das Coupling vorgeben. Oder du erstellst ein Set auf Assembly-Level in dem direkt alles drin ist was du verwenden möchtest.

*Part-Sets werden mit Instanz-Prefix im Namen ins Assembly weitergereicht. Das kann man im Baum sehen.

[Diese Nachricht wurde von Mustaine am 02. Jan. 2024 editiert.]

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

anfänger321
Mitglied
Student

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

Beiträge: 7
Registriert: 25.12.2023

Abaqus 2019

erstellt am: 02. Jan. 2024 17:31    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

Zitat:
Original erstellt von Mustaine:
Der Reihe nach:
- Was ich mit meinem Beispiel nur zeigen wollte ist, dass du nicht Objekte aus dem Part (Edges, ...) für die Erstellung von Sets im Assembly nehmen kannst.
verstanden
- Couplings werden immer auf Assembly-Level erstellt, insofern müssen die verwendeten Regionen Assembly-Regionen oder -Sets sein.
- Entweder du erstellst die Sets am Assembly (also Instanzen) oder du verwendest die vererbten* Sets aus dem Part.
- Wenn du nur ein Coupling haben möchtest, solltest du es nicht im Loop erstellen.
Der Grund für die Schleife war, damit ich n Scheiben mit dem Refpoint couplen kann. Ansonsten hatte ich keine Probleme bei meinem Code für 2fach oder 3fach Glasscheiben
- Wenn du mehrere Sets als eine Region in einem Coupling haben möchtest, dann müsstest du entweder die Sets zu einem gemeinsamen Set verschmelzen (merge) oder die Inhalte der Sets auslesen und als Region für das Coupling vorgeben. wird das nicht mit der For schleife versucht. Dass ich alle Faces durchgehe und später alle edges in eine region zusammenführe
Oder du erstellst ein Set auf Assembly-Level in dem direkt alles drin ist was du verwenden möchtest.
wie sieht da der Ansatz aus?

*Part-Sets werden mit Instanz-Prefix im Namen ins Assembly weitergereicht. Das kann man im Baum sehen.
Verstehe, also muss ich meine Part Sets erstellen und im Anschluss meine Instance erstellen und alle vorherigen Sets aus dem Part gehen auch ins Assembly über

[Diese Nachricht wurde von Mustaine am 02. Jan. 2024 editiert.][/i]


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: 3585
Registriert: 04.08.2005

Abaqus

erstellt am: 03. Jan. 2024 20:35    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 anfänger321 10 Unities + Antwort hilfreich

Zitat:
wird das nicht mit der For schleife versucht. Dass ich alle Faces durchgehe und später alle edges in eine region zusammenführe

Nein, ich denke nicht. Deine Schleife hätte in jedem Durchlauf ein neues Set erstellt. Du kannst im Coupling aber nur ein Set für die gekoppelte Region angeben.
Wenn ich das richtig sehe, hast du dann auch gar nicht das verwendet, was in der Schleife generiert wird.


Zitat:
wie sieht da der Ansatz aus?

Wie du dir die Kanten zusammensammelst ist erstmal egal. Ob mit einem oder mehreren findAt, BoundingBox oder sonst irgendwie. Um eine Kante auf Assembly-Level eindeutig zu identifizieren, musst du die Instanz haben und dann den index der Kante daran. Mit den Informationen kannst du beliebig viele davon zusammenführen und dann z.B. in ein Set stecken. Das Set kannst du dann im Coupling, etc. verwenden.

Der folgende Code zeigt an einem einfachen Beispiel, wie man sowas macht. Hier sammle ich von einer Instanz alle Kanten zusammen, die einen ungeraden index haben. Warum auch immer...

Code:

inst = a.instances['block-1']

# quasi leere edgeliste initialisieren
myedges = inst.edges[0:0]

# edges mit ungeradem index zu edgeliste hinzufügen
for xedge in inst.edges:
    edge_index = xedge.index
    if edge_index % 2 != 0:
        myedges += inst.edges[edge_index:edge_index+1]

# Set mit edges erstellen
a.Set(edges=myedges, name='set_edges')



Zitat:
Verstehe, also muss ich meine Part Sets erstellen und im Anschluss meine Instance erstellen und alle vorherigen Sets aus dem Part gehen auch ins Assembly über

Du musst das nicht machen, es ist nur eine weitere Möglichkeit bestimmte Dinge zu tun. Du musst auch nicht die Sets vor der Instanz erstellen. Öffne im Baum einfach mal den Part- und Assembly-Container. Dann jeweils den Set-Container darin. Schau dir an was du da hast und erstelle dann im Part ein neues Set. Sobald die Aktion abgeschlossen ist, wirst du das Set auch auf Assembly-Level finden, allerdings mit dem Instanz-Namen als Prefix im Set-Namen.

Wie du zu deinen benötigten Sets auf Assembly-Level kommst ist deine Entscheidung. Ob du nun bestehende Sets mit merge zusammenführst oder neue Sets auf Assembly-Level erstellst, ist am Ende egal. Mach das was für dich am besten funktioniert.

[Diese Nachricht wurde von Mustaine am 03. Jan. 2024 editiert.]

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

anfänger321
Mitglied
Student

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

Beiträge: 7
Registriert: 25.12.2023

Abaqus 2019

erstellt am: 06. Jan. 2024 15:27    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 Mustaine,

danke für deinen Ansatz und für das Beispiel. Ich habe es nun hinbekommen, dass er mir mein Coupling erstellt. Ich habe die Sets auf Part Level erstellt. Danach wie in deinem Beispiel die Sets zusammengeführt und die Sammlung zu einer region hinzugefügt.

Code:
#Coupling Reference Point mit Glasmitten oben

refPoints1=(idRF1, )
region1=a.Set(referencePoints=refPoints1, name='Loslager+Lastpunkt')

edgesTop1 = p.edges.findAt((breite/2,hoehe,dglas[0]/2),)
for i in range(0,len(dglas)):
    j=i*2
    p = mdb.models[modelname].parts[partname]
    s = p.edges
    edgeCurr = s.getByBoundingBox(-1,hoehe-1,datumDicken[j]-dglas[i]/2-1,breite+1,hoehe+1,datumDicken[j]-dglas[i]/2+1)
    idx = edgeCurr[0].index
    p.Set(edges=s[idx:idx+1], name='slaveTop'+str(i+1))

inst = a.instances[modelname]
combined_edgesTop = inst.edges[0:0]
for i in range(0, len(dglas)):
    edge_set = inst.sets['slaveTop' + str(i + 1)]
    combined_edgesTop += edge_set.edges 

a.Set(edges=combined_edgesTop, name='Combined_slaveTop')
region2=a.sets['Combined_slaveTop']
   
mdb.models[modelname].Coupling(name='Loslager+Last',
    controlPoint=region1, surface=region2, influenceRadius=WHOLE_SURFACE,
    couplingType=KINEMATIC, localCsys=None, u1=ON, u2=ON, u3=ON, ur1=ON,
    ur2=ON, ur3=ON)

#Coupling Reference Point mit Glasmitten unten

refPoints2=(idRF2, )
region1=a.Set(referencePoints=refPoints2, name='Festlager')

edgesBottom1 = p.edges.findAt((breite/2,0,dglas[0]/2),)
for i in range(0,len(dglas)):
    j=i*2
    p = mdb.models[modelname].parts[partname]
    s = p.edges
    edgeCurr = s.getByBoundingBox(-1,-1,datumDicken[j]-dglas[i]/2-1,breite+1,1,datumDicken[j]-dglas[i]/2+1)
    idx = edgeCurr[0].index
    p.Set(edges=s[idx:idx+1], name='slaveBottom'+str(i+1))

inst = a.instances[modelname]
combined_edgesBottom = inst.edges[0:0]
for i in range(0, len(dglas)):
    edge_set = inst.sets['slaveBottom' + str(i + 1)]
    combined_edgesBottom += edge_set.edges 

a.Set(edges=combined_edgesBottom, name='Combined_slaveBottom')
region2=a.sets['Combined_slaveBottom']
   
mdb.models[modelname].Coupling(name='Festlager',
    controlPoint=region1, surface=region2, influenceRadius=WHOLE_SURFACE,
    couplingType=KINEMATIC, localCsys=None, u1=ON, u2=ON, u3=ON, ur1=ON,
    ur2=ON, ur3=ON)


Geht vielleicht auch besser, aber es erfüllt für mich den Zweck.

Danke

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: 3585
Registriert: 04.08.2005

Abaqus

erstellt am: 07. Jan. 2024 13:06    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 anfänger321 10 Unities + Antwort hilfreich

Schön dass du das Problem lösen konntest.

Zwei kleine Anmerkungen:
1. Deine Instanz heißt wie dein Modell? Ungewöhnlich...

Code:
inst = a.instances[modelname]


2. Das Zusammenführen von Sets kann man alternativ auch mit der eingebauten Funktion in A/CAE (und dessen Python Kommando) machen. Markieren mal im Baum mehrere Sets und mach dann mal einen Rechtsklick auf diese, dann wirst du die Option sehen.

[Diese Nachricht wurde von Mustaine am 07. Jan. 2024 editiert.]

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

anfänger321
Mitglied
Student

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

Beiträge: 7
Registriert: 25.12.2023

Abaqus 2019

erstellt am: 08. Jan. 2024 19:39    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


Skript.txt

 
Hallo Mustaine,

vielleicht kann ich dich ja noch einmal stören  und dich um Rat bitten. Der Code oben funktioniert für 3-fach Scheiben also wenn dglas=[10,10,10] Werte enthält. Nun wollte ich das für dglas=[10,10] ausprobieren und die Schleife funktioniert erneut wieder nicht. Der Fehler liegt in der Zeile edgeCurr. Also die Werte in der BoundingBox sind nicht richtig.

Code:
#Coupling Reference Point mit Glasmitten oben

refPoints1=(idRF1, )
region1=a.Set(referencePoints=refPoints1, name='Loslager+Lastpunkt')

edgesTop1 = p.edges.findAt((breite/2,hoehe,dglas[0]/2),)
for i in range(0,len(dglas)):
    j=i*2
    p = mdb.models[modelname].parts[partname]
    s = p.edges
    edgeCurr = s.getByBoundingBox(-1,hoehe-1,datumDicken[j]-dglas[i]/2-1,breite+1,hoehe+1,datumDicken[j]-dglas[i]/2+1)
    idx = edgeCurr[0].index
    p.Set(edges=s[idx:idx+1], name='slaveTop'+str(i+1))

inst = a.instances[partname]
combined_edgesTop = inst.edges[0:0]
for i in range(0, len(dglas)):
    edge_set = inst.sets['slaveTop' + str(i + 1)]
    combined_edgesTop += edge_set.edges 

a.Set(edges=combined_edgesTop, name='Combined_slaveTop')
region2=a.sets['Combined_slaveTop']
   
mdb.models[modelname].Coupling(name='Loslager+Last',
    controlPoint=region1, surface=region2, influenceRadius=WHOLE_SURFACE,
    couplingType=KINEMATIC, localCsys=None, u1=ON, u2=ON, u3=ON, ur1=ON,
    ur2=ON, ur3=ON)


slaveTop1 entspricht der PartitionFace der zweiten Scheibe und darum erstellt er mir keine slaveTop2. Ich habe schon alles mögliche in die BoundingBox geschrieben. Das Problem ist, dass wenn ich den Code jetzt ändere, dann ist die Schleife wieder für 3-fach Scheiben nicht gültig. Ich habe auch das Skript angehangen. Weiter oben im Code erstelle ich datumplanes.

Code:

# Erstellen der Datumsebenen relativ zu den Flächen mit Berücksichtigung der Dicken
f = p.faces.findAt((delta,delta,0),)


#2Scheiben und 3Scheiben (erstellt für 4 und 5 Scheiben die letzten 2 planes nicht)
datumDicken = []
datumDicken.append(dglas[0])

for i in range(1, len(dglas)):
    if i % 2 != 0:
        datumDicken.append(datumDicken[-1] + dfolie[i - 1])
    else:
        datumDicken.append(datumDicken[-1] + dglas[i - 1])

if len(dglas) % 2 != 0:
    datumDicken.append(datumDicken[-1] + dfolie[-1])
    datumDicken.append(datumDicken[-1] + dglas[-1])
else:
    datumDicken.append(datumDicken[-1] + dfolie[-1])

for i in range(len(datumDicken)-1):
    p.DatumPlaneByOffset(plane=f, flip=SIDE2, offset=float(datumDicken[i]))


Hier erstellt er mir für 3-fach Scheiben 4 datumPlanes, was auch so richtig ist. Für 2-fach Scheiben erhalte ich 3 datumPlanes. Hiervon sind 2 an der richtigen Stelle, der dritte ist außerhalb meines Bauteils und wird nicht gezeichnet.

Deswegen besteht mein datumDicken aus 3 Werten und ich glaube der Fehler beim Coupling resultiert auch daraus.

Danke

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: 3585
Registriert: 04.08.2005

Abaqus

erstellt am: 09. Jan. 2024 16:46    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 anfänger321 10 Unities + Antwort hilfreich

Sorry, aber ich werde mich nicht Zeile für Zeile durch dein Skript arbeiten und versuchen irgendwelche Logikfehler zu finden.

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

anfänger321
Mitglied
Student

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

Beiträge: 7
Registriert: 25.12.2023

Abaqus 2019

erstellt am: 13. Jan. 2024 14:24    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

Hey Mustaine,

sorry für das Missverstädnis. Meine Absicht war auch nicht, dass du mein Skript durchgehst und mir alles korrigierst. Wie gesagt, etwas stimmt mit meinen datumPlanes nicht. Also die Erstellung der Reihenfolge der Folienschicht. In dem Fall sind es ja auch nur zwei for und if-schleifen. Alles andere baut dann auf diesen datumPlanes auf. Vielleicht ist da ja etwas offensichtliches, was ich einfach nicht sehen kann. Aber trotzdem Danke dir für deine Hilfe

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: 3585
Registriert: 04.08.2005

Abaqus

erstellt am: 16. Jan. 2024 23:16    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 anfänger321 10 Unities + Antwort hilfreich

Das ändert nichts an der Aufgabe. Ich müsste trotzdem bis zu der Problemstelle alles verstehen was vorher passiert. Das hieße auch die Bedeutung jeder Variable zu verstehen.

Lass dir mit print oder dem Logging-Modul an wichtigen Stellen deine Variablen-Werte ausgeben und versuche damit nachzuvollziehen, was in deinem Skript und Modell passiert.

A/CAE hat auch eine integrierte Entwicklungsumgebung, womit man z.B. Breakpoints setzen oder zeilenweise vorwärtsgehen kann. Es gibt auch eine Watchlist für Variablen. Siehe File->Abaqus PDE. Im Abaqus Scripting-Handbuch gibt es ein Kapitel dazu. Such einfach nach "PDE".

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)2024 CAD.de | Impressum | Datenschutz