2016-05-21 12 views
0

私は1つの部品のみからなるアセンブリを持っています。私は、Python内の全アセンブリ/パートのすべてのストレス・コンポネントの合計を取得しようとしています。 私の現在の方法の問題は、各要素のストレスを合計するのに時間がかかることです(下のコードを参照)。レポート・ファイルには1秒以内に合計が表示されるため、odbファイルを介してこれらの値にアクセスするには、より良い方法が必要です。Abaqus各応力成分の合計

ありがとうございます!

odb = session.openOdb(name='C:/temp/Job-1.odb') 
step_1 = odb.steps['Step-1'] 
stress_1=step_1.frames[-1].fieldOutputs['S'] 
#Step-1 
sum_Sxx_1=sum_Syy_1=sum_Szz_1=0 
for el in range(numElemente): 
Stress=stress_1.getSubset(region=Instance.elements[el],position=CENTROID, elementType='C3D8R').values 
sum_Sxx_1 = sum_Sxx_1 + Stress[0].data[0] 
sum_Syy_1 = sum_Syy_1 + Stress[0].data[1] 
sum_Szz_1 = sum_Szz_1 + Stress[0].data[2] 
+0

統合ポイントデータにすばやくアクセスできます。「stressdata = stress_1.values」、「stressdata [i] .data'」を参照してください。重心値を得るには余分な計算が必要で、必然的に遅いです。あなたの要素がすべて同じサイズでない限り、そのようにストレスを合計する意味はほとんどありません。 – agentp

答えて

0

Pythonによる値への直接アクセスは、実際には非常に遅いです(私は同じ問題を経験しました)。それぞれの値を持つレポートファイルを作成し、次にPythonでテキストファイルを操作することができます。ファイルを1行ずつフィードし、関連する行を見つけ、分割してストレスを与え、合計して続けます。

+0

それは私がやっていることです!しかし、ODB-Filesを読むためのより速い方法があります。ただAbaqusのマニュアルをチェックしてください。彼らはそれを正しく読む方法を示しています。私が上で使用しているコードはすべての要素を徹底的に検索しています。しかし、そこにはeverythinkがすでにまとめられているodbの他のセクションがあります。 – wasntme0804

+0

それはもうPythonコードではないと思いますが、odbに直接アクセスするために使用しているC++(正しく覚えていれば)です。 – Nikolay

+0

これは間違いなくpythonです。私はC++からの手がかりがなく、Pythonを学び始めました...「Abaqus Scripting User's Guide」の第9.5章を参照してください。 "出力データベースからの放射"。 9.5.10では、以下を使用してディスパッチを読み取る方法を示します。v in centerDisplace.values:v.data [0]などを印刷します。チェックアウトします。それは私が最終的にやった方法です。レポートファイルの方法はもう少し時間がかかりますが、それほどエレガントではありません。もしあなたがそれを理解したら教えてください。あなたが好きなら、私は次のカップル日以内に私の上のポストに追加して例を挙げることができます – wasntme0804

関連する問題