"""
odbExample.py
Script to open an output database, superimpose variables
from the last frame of different steps, and display a contour
plot of the result.
"""
from abaqus import *
from abaqusConstants import *
import visualization
myViewport = session.Viewport(name='Superposition example',
origin=(10, 10), width=150, height=100)
myOdb = visualization.openOdb(path='viewer_tutorial.odb')
myViewport.setValues(displayedObject=myOdb)
firstStep = myOdb.steps['Step-1']
secondStep = myOdb.steps['Step-2']
frame1 = firstStep.frames[-1]
frame2 = secondStep.frames[-1]
displacement1 = frame1.fieldOutputs['U']
displacement2 = frame2.fieldOutputs['U']
stress1 = frame1.fieldOutputs['S']
stress2 = frame2.fieldOutputs['S']
deltaDisplacement = displacement2 - displacement1
deltaStress = stress2 - stress1
myViewport.odbDisplay.setDeformedVariable(deltaDisplacement)
myViewport.odbDisplay.setPrimaryVariable(field=deltaStress,
outputPosition=INTEGRATION_POINT,
refinement=(INVARIANT, 'Mises'))
myViewport.odbDisplay.display.setValues(plotState=(
CONTOURS_ON_DEF,))
下面是针对代码行的逐一解读
以下语句导入Abaqus核心模块和预定义常量,并启用可视化功能:
from abaqus import*
from abaqusConstants import*
import visualization
创建名为"Superposition example"的新窗口对象:
myViewport = session.Viewport(name='Superposition example')
定义结果文件路径,并在窗口中打开输出的odb文件:
odbPath = 'viewer_tutorial.odb'
myOdb = session.openOdb(path=odbPath)
myViewport.setValues(displayedObject=myOdb) # 在视口显示默认绘图
获取结果文件中两个分析步的最后一个帧数据:
firstStep = myOdb.steps['Step-1']
secondStep = myOdb.steps['Step-2']
frame1 = firstStep.frames[-1] # 使用-1获取最后帧
frame2 = secondStep.frames[-1]
提取位移场和应力场数据:
displacement1 = frame1.fieldOutputs['U']
displacement2 = frame2.fieldOutputs['U']
stress1 = frame1.fieldOutputs['S']
stress2 = frame2.fieldOutputs['S']
计算两个步骤的增量值:
deltaDisplacement = displacement2 - displacement1
deltaStress = stress2 - stress1
配置变形显示和应力可视化:
# 设置变形变量
myViewport.odbDisplay.setDeformedVariable(deltaDisplacement)
# 设置主变量为Mises应力
myViewport.odbDisplay.setPrimaryVariable(
field=deltaStress,
outputPosition=INTEGRATION_POINT,
refinement=(INVARIANT, 'Mises')
)
# 启用变形体等值线显示
myViewport.odbDisplay.display.setValues(plotState=(CONTOURS_ON_DEF,))
特别说明:
0
表示第一个元素,-1
表示最后一个元素outputPosition=INTEGRATION_POINT
表示取积分点处的结果refinement=(INVARIANT,'Mises')
指定显示Mises应力不变量