You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于Abaqus Python脚本实现Y轴最近节点筛选及T=f(Y)曲线绘制

补全Abaqus脚本以绘制T=f(Y)曲线

需求背景

已创建包含某一面所有节点的Node Set,需要检测最高温度Tmax对应的节点,定义经过该节点的局部坐标系,找出所有距离该局部Y轴最近的节点,提取其Y坐标与温度值,绘制温度随Y方向分布的曲线。

完整补全代码

from abaqus import *
from abaqusConstants import *
import numpy as np
import matplotlib.pyplot as plt

# 原有代码部分
path0='1101.odb'
odb=openOdb(path=path0)

nodeset='NODESET-ZCT'
mySet = odb.rootAssembly.instances['PART-1-1'].nodeSets[nodeset]
lastFrame = odb.steps['Step-1'].frames[-1]
TEMP=lastFrame.fieldOutputs['NT11']
mySetTemp = TEMP.getSubset(region=mySet)
mySetTempValues=mySetTemp.values
coords=lastFrame.fieldOutputs['COORD']
mySetCoord = coords.getSubset(region=mySet)
mySetCoordValues=mySetCoord.values

Tmax = 0
for v in mySetTempValues:
    if v.data > Tmax:
        Tmax = v.data
        NodeTmax=v.nodeLabel
print(NodeTmax,Tmax)

COORD_node_Tmax = None
for var in mySetCoordValues:
    if var.nodeLabel==NodeTmax:
        COORD_node_Tmax=var.data
print(NodeTmax,Tmax,COORD_node_Tmax)

CSYS_Tmax=odb.rootAssembly.DatumCsysByThreePoints(name='CSYS-Tmax', 
    coordSysType=CARTESIAN, origin=(COORD_node_Tmax[0], 0.0, 0.0), point1=(0.0, 
    0.0, 0.0), point2=(COORD_node_Tmax[0],COORD_node_Tmax[1],COORD_node_Tmax[2]))

# -------------------------- 补全部分开始 --------------------------
# 1. 获取局部坐标系的变换矩阵,用于全局坐标转局部坐标
csys = odb.rootAssembly.datumCsyses['CSYS-Tmax']
transform = csys.getTransformation()

# 2. 遍历节点,计算每个节点到局部Y轴的距离,收集对应Y坐标和温度
node_data = []
for coord_val, temp_val in zip(mySetCoordValues, mySetTempValues):
    if coord_val.nodeLabel != temp_val.nodeLabel:
        continue  # 确保坐标与温度对应同一节点
    
    # 全局坐标转局部坐标(齐次坐标转换)
    global_coord = np.array(coord_val.data)
    local_coord = transform.dot(np.append(global_coord, 1.0))[:3]
    
    # 计算到局部Y轴的距离:sqrt(局部X² + 局部Z²)
    distance_to_Y_axis = np.sqrt(local_coord[0]**2 + local_coord[2]**2)
    
    node_data.append({
        'y_local': local_coord[1],
        'temp': temp_val.data,
        'distance': distance_to_Y_axis
    })

# 3. 筛选距离局部Y轴最近的节点(考虑数值精度设置容差)
min_distance = min([d['distance'] for d in node_data])
tolerance = 1e-6  # 可根据模型尺寸调整
filtered_nodes = [d for d in node_data if abs(d['distance'] - min_distance) < tolerance]

# 4. 按局部Y坐标排序,保证曲线绘制顺序正确
filtered_nodes.sort(key=lambda x: x['y_local'])

# 5. 提取数据并绘制曲线
y_values = [d['y_local'] for d in filtered_nodes]
temp_values = [d['temp'] for d in filtered_nodes]

plt.figure(figsize=(8, 6))
plt.plot(y_values, temp_values, 'b-', linewidth=2, marker='o', markersize=4)
plt.xlabel('局部Y坐标')
plt.ylabel('温度 T')
plt.title('温度沿局部Y轴分布曲线')
plt.grid(True)
plt.show()

# 关闭odb文件释放资源
odb.close()

关键步骤说明

  • 坐标转换:通过getTransformation()获取局部坐标系的变换矩阵,将全局坐标转换为局部坐标,确保距离计算针对目标局部Y轴。
  • 距离筛选:计算每个节点到局部Y轴的距离,筛选出距离最小的节点组,设置容差避免数值精度问题。
  • 数据整理:将筛选后的节点按Y坐标排序,保证曲线绘制的连续性。
  • 可视化:使用matplotlib绘制温度随Y坐标变化的曲线,直观展示分布规律。

内容的提问来源于stack exchange,提问作者Wahid Tarhouni

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 05:27:34