2016-07-28 20 views
0

Mein Ziel ist es, eine übergangsweise gemappte Quad-Meshing auf einem langen rechteckigen Bereich, der ein parametrisiertes Modell ist. Das endgültige Netz kann wie folgt zu sehen:Schneller Weg, um ein Gesicht mit Skizze in ABAQUS mit Scripting zu partitionieren

Transition Mapped Quad Meshing

Die einzige Art, wie ich diese letzte Ausgabe Mesh erkennen konnte, war das Gesicht mit Skizze zu partitionieren und dann einem ausreichenden Netzkontrollen und Aussaat auf den jeweiligen Kanten an. Aus diesem Grunde begann ich einen Block auf der linken Seite der Geometrie wie dies mit der Erzeugung:

Single block created by partioning the face with sketch

Danach wird ein „für“ Schleife in dem Python-Skript von der linken Seite verwendet wurde, läuft der die rechteckige Fläche auf der äußersten rechten Ende und der letzte partitioniert Gesicht sieht wie folgt aus:

Final geometry ready to be meshed

Also, ich in drei Möglichkeiten dies zu tun versucht.

Option 1: Platzieren Sie das Skizzierfenster mit findAt auf der linken Seite und erzeugen Sie dann den Block und schieben Sie mit einer "for" -Schleife den Ursprung des Koordinatensystems des Skizzierfensters nach rechts inkrementell bis zum rechte Seite. Mit anderen Worten, die Position des Blocks in Bezug auf den Ursprung blieb immer gleich, und daher bewegte sich der Block mit ihm, wenn sich der Ursprung von links nach rechts bewegte. Also musste ich "Partition Face with Sketch" so oft öffnen und schließen wie die Anzahl der benötigten Blöcke.

Option 2: Der Ursprung des Skizziererfensters blieb an der gleichen Stelle (d. H. Bei 0,0, 0,0, 0,0) und die Blöcke wurden schrittweise nach rechts geschoben. Im Vergleich zu Option 1 änderte sich hier die relative Position des Blocks zum Ursprung über jedes Inkrement. Auch hier wurde "Partitionsfläche mit Skizze" so oft geöffnet und geschlossen wie die Anzahl der benötigten Blöcke.

Option 3: Ich habe das "Partition Face with Sketch" nur einmal geöffnet und der Ursprung blieb am selben Ort. Dann zeichnete ich alle diese horizontalen und vertikalen Linien auch mit einer "for" -Schleife, was zur endgültigen partitionierten Fläche führte.

Alle diese Methoden funktionieren perfekt, sind aber extrem zeitaufwendig. Jedes dieser Verfahren dauert fast 8-12 Minuten, um die Erzeugung aller Blöcke abzuschließen, und ist daher für eine Konvergenzstudie nicht geeignet.

Kann jemand eine bessere Lösung vorschlagen, um den gesamten Prozess schneller zu machen, wie in 3-4 Minuten oder so? Würde es wirklich zu schätzen wissen. Danke im Voraus.

EDIT: Hier ist der Code Jungs:

# The arguments of the function "block" are the x and y coordinates of the 
# 4 corners of the rectangle where the blocks have to be generated in. 
def block(x_left, x_right, y_top, y_bottom): 

    # Opens the sketcher window 
    p = mdb.models['TDCB'].parts['Part_TDCB'] 
    f, e, d = p.faces, p.edges, p.datums 
    t = p.MakeSketchTransform(sketchPlane=f.findAt(coordinates=(x_left + ((x_right - x_left)/3), y_bottom + ((y_top - y_bottom)/3), 0.0), 
    normal=(0.0, 0.0, 1.0)), sketchPlaneSide=SIDE1, origin=(x_left, y_bottom, 0.0))    
    s = mdb.models['TDCB'].ConstrainedSketch(name='__profile__', sheetSize=500.00, 
    gridSpacing=12.00, transform=t) 
    g, v, d1, c = s.geometry, s.vertices, s.dimensions, s.constraints 
    s.setPrimaryObject(option=SUPERIMPOSE) 
    p.projectReferencesOntoSketch(sketch=s, filter=COPLANAR_EDGES) 


    # The following block generates the first couple of horizontal lines 
    s.Line(point1=(block_width, 0.0), point2=(block_width, y_top)) # Line No.1 

    s.Line(point1=(0.0, y_coord[-2]), point2=(block_width, y_coord[-2])) # Line No.2 

    s.Line(point1=(0.0, y_coord[-3]), point2=(block_width, y_coord[-3])) # Line No.3 

    s.Line(point1=(0.0, y_coord[-4]), point2=(block_width, y_coord[-4])) # Line No.4 

    s.Line(point1=(0.0, y_coord[-5]), point2=(block_width, y_coord[-5])) # Line No.5 

    s.Line(point1=(0.0, y_coord[-6]), point2=(block_width, y_coord[-6])) # Line No.6 

    # Closes the sketcher window 
    p = mdb.models['TDCB'].parts['Part_TDCB'] 
    f = p.faces 
    pickedFaces = f.findAt((x_left + ((x_right - x_left)/3), y_bottom + ((y_top - y_bottom)/3), 0.0))      
    e1, d2 = p.edges, p.datums 
    p.PartitionFaceBySketch(faces=pickedFaces, sketch=s) 
    s.unsetPrimaryObject() 
    del mdb.models['TDCB'].sketches['__profile__']  

    return 

# Finally the blocks are generated using a "for" loop 
for i in range(total_blocks): 
    block(x_left, x_right, y_top, y_bottom) 
+0

zeigen vielleicht ein Beispiel des Codes würde nützlich sein. – agentp

+0

Sie können alle Ihre Linien in einer Skizze erstellen und dann in einem Durchgang partitionieren? Keine Notwendigkeit für mehrere Schritte. Auch was ist falsch mit einem Störung Netz, das von groß zu klein übergeht? Es muss nicht so ein schöner Übergang sein, wie Sie es gezeigt haben. – will

+0

@Will: Das ist ein sehr hilfreicher Hinweis. Ich werde es ausprobieren. Danke vielmals..Über den Übergang, das ist eigentlich, was mein Supervisor will, weil die vorherigen Modelle von einem anderen Typ mit dem gleichen Übergang generiert wurden. –

Antwort

0

Es scheint, Sie müssen den Prozess wie in ABAQUS Skizze Skizzieren Sie Lineares Muster verwenden können, kopieren/duplizieren Sie die erste Skizze nicht iterieren (erste Block auf der linken Seite). Dies kann den gesamten Prozess erleichtern. Vielen Dank.

Grüße, Longjie

+0

Das ist ein sehr wertvoller Vorschlag, ganz anders als das, was ich gemacht habe. Ich werde das ausprobieren. Danke vielmals.. –