Abaqus脚本写入ODB最大应力场时omu_PrimArray维度错误怎么解决?
报错原因
你遇到的omu_PrimArray from sequence failed - dimensions报错由两个核心问题导致:
- 计算最大值时直接调用了FieldValue对象,没有提取实际的标量数值:你代码里的
v1=sigma_eq_1.values[i]拿到的是Abaqus的场输出值对象,不是应力数值本身,需要调用.data属性获取数值。 - 传入
addData的maxStress数据维度不符合要求:SCALAR类型的场输出要求传入一维数值序列,你代码里用(max(v1,v2,v3,v4,v5,v6),)把每个值包装成了元组,最终maxStress是二维嵌套结构,和Abaqus要求的维度不匹配。 - 额外注意:需要确保6个源场输出的积分点数量、顺序完全一致,否则按索引遍历会出现积分点对应错误。
修复方法
修改maxStress的构造逻辑,提取数值同时调整维度即可,修改后的完整代码如下:
from abaqus import * from abaqusConstants import * import visualization myViewport = session.Viewport(name='Max_Stess', origin=(10, 10), width=150, height=100) # Open the tutorial output database. myOdb = visualization.openOdb(path='PROVA_04_10.odb', readOnly=False) # Associate the output database with the viewport. myViewport.setValues(displayedObject=myOdb) instance1 = myOdb.rootAssembly.instances['MODIFICA_FUNZIONANTE'] # Create variables that refer to the first steps. firstStep = myOdb.steps['sigma_equivalenti'] frame = firstStep.frames[-1] # 读取6个等效应力场输出 sigma_fields = [ frame.fieldOutputs['sigma_eq_1'], frame.fieldOutputs['sigma_eq_2'], frame.fieldOutputs['sigma_eq_3'], frame.fieldOutputs['sigma_eq_4'], frame.fieldOutputs['sigma_eq_5'], frame.fieldOutputs['sigma_eq_6'] ] # 计算每个积分点的最大值,构造一维数组 maxStress = [] for idx in range(len(sigma_fields[0].values)): current_vals = [field.values[idx].data for field in sigma_fields] maxStress.append(max(current_vals)) # 创建并填充新场输出 myFieldOutput = frame.FieldOutput(name='tensioni_max',description='calcolo delle tensioni massime', type=SCALAR) myFieldOutput.addData(position=INTEGRATION_POINT, instance=instance1, data=maxStress) # 在视口中显示新场输出 myViewport.odbDisplay.setPrimaryVariable(field=myFieldOutput,outputPosition=INTEGRATION_POINT) myViewport.odbDisplay.display.setValues(plotState=(CONTOURS_ON_DEF,))
内容的提问来源于stack exchange,提问作者Federico Bellini
相关产品推荐
相关产品推荐

