2017-07-16 4 views
-1

Ich habe eine Datei, die Temperaturwerte für bestimmte Koordinaten enthält. Das Format der Datei ist wie folgt:Anwenden Temperatur auf angegebene Knoten in Abaqus mit Python-Skript

X Y Z Temp

Ziel diese Informationen aus einer Datei zu lesen ist und wenden Sie es, dann tut Abaqus seine Magie. Ich habe ein Python-Skript erhalten, das das Modell erstellt (ich vermute, dass dieses Skript automatisch mit der Abaqus-GUI erstellt wurde). In dieser Datei werden Methoden wie edges.findAt, faces.findAt und vertices.findAt verwendet, um den gewünschten Ort auszuwählen und die Temperatur anzuwenden. Jetzt suche ich nach einer Möglichkeit, Abaqus zu sagen, dass er die Temperatur an bestimmten Knotenpunkten anwenden soll. Es scheint, dass es möglich ist, da, wenn ich mir die Inp-Datei ansehe, ich ein solches Muster sehe. Selbst wenn Sie mir ein Beispiel geben könnten, das Last, Temperatur oder irgendetwas aus einer Datei liest und an einem bestimmten Ort anwendet, könnte es sehr hilfreich sein.

--Edit--

Die Datei, die ich gearbeitet habe mit kann an dieser link finden. Es enthält zwei Dateien, heat_aba.py und input.txt. Mein Problem betrifft die Zeilen 58-102, die durch eine Routine in Python ersetzt werden sollen, um die Temperaturen von input.txt zu lesen und das Modell in Abaqus zu initialisieren. Die Koordinaten in der Eingabe.txt sind Knotenkoordinaten.

+1

Gibt es einen Knoten an der Stelle x, y, z? Sie können die Temperatur nur an einem Knoten vorgeben. In jedem Fall ist diese Frage außerhalb des Umfangs dieser Website, es sei denn, Sie können den Code anzeigen, an dem Sie gerade arbeiten und Probleme damit haben. – agentp

+0

Ich habe die Frage aktualisiert und die entsprechenden Dateien hinzugefügt. Außerdem sind die Koordinaten die Position von Knoten. –

+0

Es ist wirklich nicht klar, wo Sie ein Problem haben. Weißt du, wie man eine Datei in Python öffnet? Wenn nicht, sollten Sie abaqus weglegen und ein Python-Tutorial lesen. – agentp

Antwort

1

Ich konzentriere meine Antwort auf die Abaqus/Python-Details, da Ressourcen zum Erlernen, Dateien mit Python zu öffnen/zu lesen, bereits weit verbreitet sind.

Die Methode findAt wird für geometrische Merkmale verwendet. Um zum Beispiel ein Gesicht Objekt an einem bestimmten Ort zurückzukehren, verwenden:

f = mdb.models[NAME].rootAssembly.instances[NAME].faces.findAt((x,y,z)) 

Der Befehl ist ähnlich dem Cell, Edge und Vertex-Objekte. Beachten Sie, dass es eine Mehrdeutigkeit geben kann, wenn möglicherweise mehr als ein Objekt den angegebenen Koordinaten zugeordnet werden kann. Wenn der angegebene Punkt beispielsweise an der Grenze mehrerer Flächen liegt (z. B. an einer Kante), müssen Sie sicherstellen, dass die korrekte Fläche von findAt zurückgegeben wird. (Außerdem erwähnen Sie in einem Ihrer Kommentare, dass Sie einen Knoten in der Variablen tmp_node gespeichert haben, aber das ist eigentlich ein Vertex-Objekt).

Nun, wenn Sie ein geometrisches Objekt Bezug haben, wie f oben gezeigt, Sie verwenden, können die Knoten mit dieser geometrischen Bereich zugeordnet, um festzustellen:

node_objects = f.getNodes() 

Wieder ähnliche Methoden sind für andere geometrische verfügbar Entitäten. Beachten Sie, dass getNodes eine Liste von Node-Objekten zurückgibt, von denen jedes verschiedene Attribute besitzt. Um das Etikett oder Koordinaten des i th Knoten zu erhalten, können Sie verwenden:

n = node_object[i].label 
c = node_object[i].coordinates 

Nun, wenn Sie mit Python vertraut sind, auf einen Eintrag diesen Knoten Anpassung sollte in der externen Datendatei einfach sein . Wenn nicht, sollte das hier auf SO eine eigene Frage sein.

Um die gewünschte Temperatur auf den Knoten anzuwenden, müssen Sie ein Temperature-Objekt verwenden (hier sehen Sie ein Muster der Objektverwendung?). Sie haben ein Beispiel dafür in dem (automatisch generierten?) Python-Skript, mit dem Sie verbunden sind, in den von Ihnen erwähnten Zeilen. Ersetzen Sie einfach die richtige Größe und Region.Zum Beispiel m und a unter der Annahme, sind das Modell und Wurzel Montage:

# ...various module imports. 
myregion = a.Set(name=NAME, nodes=(node_objects[100:101],)) 
m.Temperature(name=NAME, createStepName=NAME, magnitudes=(NUMBER,), region=myregion) 
a.regenerate() 

Beachten Sie, dass beide myregion.nodes und magnitudes bestellt, also wenn Sie klug sind, können Sie die Temperaturen für alle Knoten mit einem einzigen Befehl definieren.

Verwandte Themen