私はAbaqus(6.13)を使ってFEM熱シミュレーションを実行しています。私は、そのモデルに適用された全外部熱流束を取得する必要があります。私の検索によると、それを得る唯一の方法はRFLEの履歴出力をモデル全体で合計することであり、うまくいきます。問題は、〜300000要素のモデルがあり、Report/XYウィンドウの簡単な開きに数時間かかります。AbaqusマクロをPythonスクリプトに変換する
輸出を簡略化するために、Abaqusのマクロマネージャーを使用してエクスポートマクロを作成しました。記録はabaqusでodbをインポートする前に開始され、X/Yデータを含むレポートをエクスポートした後に終了します。 このマクロは(〜900 000行)大きいので、私はここでのトリミングされたバージョンあなたを与える生成:
# -*- coding: mbcs -*-
# Do not delete the following import lines
from abaqus import *
from abaqusConstants import *
import __main__
def OdbMacro1():
import section
import regionToolset
import displayGroupMdbToolset as dgm
import part
import material
import assembly
import step
import interaction
import load
import mesh
import optimization
import job
import sketch
import visualization
import xyPlot
import displayGroupOdbToolset as dgo
import connectorBehavior
import os
os.chdir(r"C:\FolderPath")
session.mdbData.summary()
o1 = session.openOdb(name='C:\FolderPath\odb.odb')
session.viewports['Viewport: 1'].setValues(displayedObject=o1)
odb = session.odbs['C:\FolderPath\odb.odb']
xy0 = xyPlot.XYDataFromHistory(odb=odb,
outputVariableName='Nodal temperature: NT11 PI: PAD-1 Node 10 in NSET PADSURF_BACK',
steps=('Step-2',), suppressQuery=True)
xy1 = xyPlot.XYDataFromHistory(odb=odb,
outputVariableName='Nodal temperature: NT11 PI: PAD-1 Node 10053 in NSET PADSURF_BACK',
steps=('Step-2',), suppressQuery=True)
xy2 = xyPlot.XYDataFromHistory(odb=odb,
outputVariableName='Nodal temperature: NT11 PI: PAD-1 Node 10054 in NSET PADSURF_BACK',
steps=('Step-2',), suppressQuery=True)
xy3 = xyPlot.XYDataFromHistory(odb=odb,
outputVariableName='Nodal temperature: NT11 PI: PAD-1 Node 10055 in NSET PADSURF_BACK',
steps=('Step-2',), suppressQuery=True)
xy4 = xyPlot.XYDataFromHistory(odb=odb,
outputVariableName='Nodal temperature: NT11 PI: PAD-1 Node 10056 in NSET PADSURF_BACK',
steps=('Step-2',), suppressQuery=True)
xy5 = avg((xy0, xy1, xy2, xy3, xy4,),)
session.XYData(name='x0.nt11', objectToCopy=xy5,
sourceDescription='avg((Nodal temperature: NT11 PI: PAD-1 Node 10 in NSET PADSURF_BACK, Nodal temperature: NT11 PI: PAD-1 Node 10053 in NSET PADSURF_BACK, Nodal temperature: NT11 PI: PAD-1 Node 10054 in NSET PADSURF_BACK, Nodal temperature: NT11 PI: PAD-1 Node 10055 in NSET PADSURF_BACK, Nodal temperature: NT11 PI: PAD-1 Node 10056 in NSET PADSURF_BACK,),)')
odb = session.odbs['C:\FolderPath\odb.odb']
xy0 = xyPlot.XYDataFromHistory(odb=odb,
outputVariableName='RFLE11: RFLE11 PI: PAD-1 Node 1', steps=('Step-2',
), suppressQuery=True)
xy1 = xyPlot.XYDataFromHistory(odb=odb,
outputVariableName='RFLE11: RFLE11 PI: PAD-1 Node 2', steps=('Step-2',
), suppressQuery=True)
xy2 = xyPlot.XYDataFromHistory(odb=odb,
outputVariableName='RFLE11: RFLE11 PI: PAD-1 Node 3', steps=('Step-2',
), suppressQuery=True)
[...]
xy280068 = xyPlot.XYDataFromHistory(odb=odb,
outputVariableName='RFLE11: RFLE11 PI: SLIDER-1 Node 210034', steps=(
'Step-2',), suppressQuery=True)
xy280069 = xyPlot.XYDataFromHistory(odb=odb,
outputVariableName='RFLE11: RFLE11 PI: SLIDER-1 Node 210035', steps=(
'Step-2',), suppressQuery=True)
xy280070 = sum((xy0, xy1, xy2, xy3, xy4, xy5, xy6, xy7, xy8, xy9, xy10, xy11,
xy12, xy13, xy14, xy15, xy16, xy17, xy18, xy19, xy20, xy21, xy22, xy23,
xy24, xy25, xy26, xy27, xy28, xy29, xy30, xy31, xy32, xy33, xy34, xy35,
[...]
xy280057, xy280058, xy280059, xy280060, xy280061, xy280062, xy280063,
xy280064, xy280065, xy280066, xy280067, xy280068, xy280069,),)
session.XYData(name='model.RFLE', objectToCopy=xy280070,
sourceDescription='sum((RFLE11: RFLE11 PI: PAD-1 Node 1, RFLE11: RFLE11 PI: PAD-1 Node 2, RFLE11: RFLE11 PI: PAD-1 Node 3,
[...]
RFLE11: RFLE11 PI: SLIDER-1 Node 210033, RFLE11: RFLE11 PI: SLIDER-1 Node 210034, RFLE11: RFLE11 PI: SLIDER-1 Node 210035,),)')
odb = session.odbs['C:\FolderPath\odb.odb']
xy0 = xyPlot.XYDataFromHistory(odb=odb,
outputVariableName='Heat flux: HFLA ASSEMBLY_SLIDERSURF/ASSEMBLY_PADSURF PI: SLIDER-1 Node 5',
steps=('Step-2',), suppressQuery=True)
xy1 = xyPlot.XYDataFromHistory(odb=odb,
outputVariableName='Heat flux: HFLA ASSEMBLY_SLIDERSURF/ASSEMBLY_PADSURF PI: SLIDER-1 Node 6',
steps=('Step-2',), suppressQuery=True)
xy2 = xyPlot.XYDataFromHistory(odb=odb,
outputVariableName='Heat flux: HFLA ASSEMBLY_SLIDERSURF/ASSEMBLY_PADSURF PI: SLIDER-1 Node 12
[................................................................]
=True)
xy6000 = xyPlot.XYDataFromHistory(odb=odb,
outputVariableName='Heat flux: HFLA ASSEMBLY_SLIDERSURF/ASSEMBLY_PADSURF PI: SLIDER-1 Node 18048',
steps=('Step-2',), suppressQuery=True)
xy6001 = sum((xy0, xy1, xy2, xy3, xy4, xy5, xy6, xy7, xy8, xy9, xy10, xy11,
xy12, xy13, xy14, xy15, xy16, xy17, xy18, xy19, xy20, xy21, xy22, xy23,
[................................................................]
xy5991, xy5992, xy5993, xy5994, xy5995, xy5996, xy5997, xy5998, xy5999,
xy6000,),)
session.XYData(name='surf.hfla', objectToCopy=xy6001,
sourceDescription='sum((Heat flux: HFLA ASSEMBLY_SLIDERSURF/ASSEMBLY_PADSURF PI: SLIDER-1 Node 5, Heat flux: HFLA ASSEMBLY_SLIDERSURF/ASSEMBLY_PADSURF PI: SLIDER-1 Node 6, Heat flux: HFLA ASSEMBLY_SLIDERSURF/ASSEMBLY_PADSURF PI: SLIDER-1 Node 12050, Heat flux: HFLA ASSEMBLY_SLIDERSURF/ASSEMBLY_PADSURF PI: SLIDER-1 Node 12051, Heat flux: HFLA ASSEMBLY_SLIDERSURF/ASSEMBLY_PADSURF PI: SLIDER-1 Node 12052, Heat flux: HFLA ASSEMBLY_SLIDERSURF/ASSEMBLY_PADSURF PI: SLIDER-1 Node 12053, Heat flux: HFLA ASSEMBLY_SLIDERSURF/ASSEMBLY_PADSURF PI: SLIDER-1 Node 12054, Heat flux: HFLA ASSEMBLY_SLIDERSURF/ASSEMBLY_PADSURF PI: SLIDER-1 Node 12055, Heat flux: HFLA ASSEMBLY_SLIDERSURF/ASSEMBLY_PADSURF PI: SLIDER-1 Node 12056, Heat flux: HFLA ASSEMBLY_SLIDERSURF/ASSEMBLY_PADSURF PI: SLIDER-1 Node 12057, Heat flux: HFLA ASSEMBLY_SLIDERSURF/ASSEMBLY_PADSURF PI: SLIDER-1 Node 12058, Heat flux: HFLA ASSEMBLY_SLIDERSURF/ASSEMBLY_PADSURF PI: SLIDER-1 Node 12059, Heat flux: HFLA ASSEMBLY_SLIDERSURF/ASSEMBLY_PADSURF PI: SLIDER-1 Node 12060, Heat flux: HFLA ASSEMBLY_SLIDERSURF/ASSEMBLY_PADSURF PI: SLIDER-1 Node 12061, Heat flux: HFLA ASSEMBLY_SLIDERSURF/ASSEMBLY_PADSURF PI: SLIDER-1 Node 12062, Heat flux: HFLA ASSEMBLY_SLIDERSURF/
[................................................................]
37, Heat flux: HFLA ASSEMBLY_SLIDERSURF/ASSEMBLY_PADSURF PI: SLIDER-1 Node 18038, Heat flux: HFLA ASSEMBLY_SLIDERSURF/ASSEMBLY_PADSURF PI: SLIDER-1 Node 18039, Heat flux: HFLA ASSEMBLY_SLIDERSURF/ASSEMBLY_PADSURF PI: SLIDER-1 Node 18040, Heat flux: HFLA ASSEMBLY_SLIDERSURF/ASSEMBLY_PADSURF PI: SLIDER-1 Node 18041, Heat flux: HFLA ASSEMBLY_SLIDERSURF/ASSEMBLY_PADSURF PI: SLIDER-1 Node 18042, Heat flux: HFLA ASSEMBLY_SLIDERSURF/ASSEMBLY_PADSURF PI: SLIDER-1 Node 18043, Heat flux: HFLA ASSEMBLY_SLIDERSURF/ASSEMBLY_PADSURF PI: SLIDER-1 Node 18044, Heat flux: HFLA ASSEMBLY_SLIDERSURF/ASSEMBLY_PADSURF PI: SLIDER-1 Node 18045, Heat flux: HFLA ASSEMBLY_SLIDERSURF/ASSEMBLY_PADSURF PI: SLIDER-1 Node 18046, Heat flux: HFLA ASSEMBLY_SLIDERSURF/ASSEMBLY_PADSURF PI: SLIDER-1 Node 18047, Heat flux: HFLA ASSEMBLY_SLIDERSURF/ASSEMBLY_PADSURF PI: SLIDER-1 Node 18048,),)')
x0 = session.xyDataObjects['surf.hfla']
x1 = session.xyDataObjects['model.RFLE']
x2 = session.xyDataObjects['x0.nt11']
session.xyReportOptions.setValues(interpolation=ON)
session.writeXYReport(fileName='C:\FolderPath\report.rpt',
appendMode=OFF, xyData=(x0, x1, x2))
OdbMacro1()
を私はこことそこに着いた検索結果、以下の、最後にOdbMacro1への呼び出しを追加しました。
私はPythonファイルからそのマクロ(または少なくとも有用な部分)をGUIの外で実行したいと思います。私は( "C:Pythonの\ファイル\フォルダ> ABAQUSパイソンmacro.pyを\に\パス\" で)行うと、私はエラーを取得する:
Traceback (most recent call last):
File "macro.py", line 3, in <module>
from abaqus import *
File "SMAPyaModules\SMAPyaAbqPy.m\src\abaqus.py", line 15, in <module>
ImportError: abaqus module may only be imported in the Abaqus kernel process
。私は問題が何であるか理解していない。ファイルの先頭に "import odbAccess"を追加しようとしましたが、同じエラーが発生します。私は冒頭にいくつかのコードを追加するべきだと思うが、私はそれを回避することはできない。私たちを手伝ってくれますか?ところで
は、それは二次的なものですが、私は機能簡素化することができような気がします。私は削除する場合があり、すべてが必要とされ を確認していない関数の先頭でインポートの束の中に
- を一部?
- の出力が同じ操作で合計(または平均)されたすべてのノードが1組を形成します。 マクロ内の個々の履歴 の出力を避けるために、その方法を使用する方法はありませんか?
回答ありがとうございます。ここ
と参照://他の質問にstackoverflow.com/a/28374118/1004168 – agentp
、はいあなたはunnescesaryのインポートを削除できます。 noguiでコマンドラインから実行する必要がある場合は、必要と思わないインポートを削除するように、その方法でテストしてください。 – agentp
両方のあなたの回答のためにagentpに感謝します。本当に投稿したリンクが私の主な質問に答えました。私はすでに別のソースからそのメソッドを試していましたが、コピーしたコードは機能しませんでした(「noGUI」の後ろに「=」がありません)。 二次的なものについては、インポートについて試行錯誤しています(私はスクリプトを実行できるようになりました)。しかし、単一のノードの代わりにセットを扱う方法があるかどうか知っていますか?それはマクロのサイズを大きく減らすでしょう。 最後に、コメントではなく回答機能を使用して回答した場合、回答を最良の回答としてマークすることができます(私の考える唯一の投稿だと思う) –