我正在使用 Abaqus (6.13) 运行 FEM 热模拟。我需要获得应用于该模型的总外部热通量。我的搜索表明,获得它的唯一方法是对整个模型的 RFLE 历史输出求和,并且效果很好。问题是我有大约 300 000 个元素模型,并且简单打开 Report/XY 窗口需要几个小时。
为了简化我的导出,我使用 Abaqus 的宏管理器制作了一个导出宏。记录在将odb导入abaqus之前开始,并在导出包含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:\Path\to\python\file\folder>abaqus python 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”,但出现相同的错误。我认为我应该在开始时添加一些代码,但我无法绕过它。你可以帮帮我吗?
顺便说一下,这是次要的,但我觉得我可以简化这个功能:
- 在函数开头的一堆导入中我不是
确定需要全部,我可以删除一些吗?
- 所有历史节点
输出在同一操作中求和(或平均)形成一组。
有没有办法使用它来避免使用每个单独的历史记录
宏中的输出?
感谢您提供答案。 :)