想象一下,你刚刚完成了一项复杂的仿真研究,使用了像试验设计(DOE)这样的方法,生成了成百上千个模拟结果。这些数据宝藏蕴含着巨大的潜力,可以用来:
训练一个快速的降阶模型(ROM)来进行实时预测。
构建一个能与物理世界同步的数字孪生体。
前端页面云图可视化展示。
直接利用Python中的AI库(如TensorFlow/PyTorch)进行数据挖掘和智能分析。
但当你兴冲冲地准备处理这些数据时,却遇到了一个常见的“拦路虎”:Ansys等专业仿真软件生成的结果文件(如.rst, .rth, .odb)是特殊的二进制格式。
你可以这样理解:这种格式就像是软件为自己的读写速度而设计的“内部语言”,效率虽高,但外界却“听不懂”。这导致了数据孤岛——你的宝贵数据被锁在这些文件里,无法被Python、MATLAB等主流数据分析工具直接读取和使用。
那么,如何打破这个壁垒,将数据从“专用格式”解放到“通用世界”呢?这就是本文的核心目标。
我们将手把手教你,如何利用Ansys官方推出的开源Python工具包——PyAnsys,轻松地将你的.rst和.rth结果文件,转换为通用的VTK格式。
为什么选择VTK格式?
VTK是科学计算可视化领域的“通用语言”。它能完美保留模型的三维网格结构和物理场数据的空间分布,可以被ParaView等众多可视化软件直接打开,也极易被各种编程环境(包括Python)读取,用于后续分析。
我们将使用的“神器”:PyAnsys生态。
简单来说,PyAnsys是Ansys官方用Python打造的一套“自动化控制工具”,它让你能用Python脚本操控几乎所有Ansys产品的工作流。在本教程中,我们将聚焦于其中的两个核心模块:
PyDPF-Core:这是数据处理的基础引擎。它非常灵活,可以直接读取和操作Ansys的结果数据,是我们进行格式转换的基石。
PyDPF-Post:这是建立在PyDPF-Core之上的 “快捷后处理工具包”。它提供了更简单、直观的命令来提取你关心的结果(比如最大应力、平均温度等),让代码写起来更轻松。
通过本文,你将不仅学会一个数据转换的技巧,更能理解如何利用PyAnsys这个强大的生态,将仿真工作流与现代化的数据科学工具链无缝连接起来。
以下使用PyDPF-core/post读取Mechanical的rth及rst结果数据,并导出为vtk文件的示例(需要安装pyansys库,Ansys版本>=2021R1)。
通过Ansys Workbench(2023R1)软件建立压力容器热固耦合分析,获得温度及结构结果。
Ansys计算结果云图如下:
总变形云图
等效应力云图
温度云图
通过pyansys库将上述三个物理场结果导出为一个vtk文件,并通过pyvista库进行绘制,如下:
部分代码如下:
# ----- 将rth及rst结果导出为vtk文件 -----
from ansys.dpf import post
import os
from ansys.dpf import core
os.chdir(r'D:\6. my\Ansys Mechanical to vtk') # 切换当前路径
rth_file = r'case_files\dp0\SYS\MECH\file.rth'
rst_file = r'case_files\dp0\SYS-1\MECH\file.rst'
# 加载结果文件,并获取结果
solution_rth = post.load_solution(rth_file)
solution_rst = post.load_solution(rst_file)
temperature_scalar = solution_rth.temperature().scalar # 温度
displacement_norm = solution_rst.displacement().norm # 整体变形
stress_von_mises = solution_rst.stress().von_mises # 等效应力
……
# ---- 绘制vtk(建议与上方的代码分开执行) -----
import pyvista as pv
import numpy as np
mesh = pv.read(r"Case_disp_mises_temp.vtk")
from matplotlib.colors import LinearSegmentedColormap
colors = [
[0,0,255],[0,93,255],[0,185,255],[0,255,232],
[0,255,139],[0,255,46],[46,255,0],[139,255,0],
[232,255,0],[255,185,0],[255,93,0],[255,0,0]
]
colors = np.array(colors)/255.0
custom_cmap = LinearSegmentedColormap.from_list('custom_cmap', colors, N=12)
……
pl = pv.Plotter(shape=(1,3), window_size=(2000,800), off_screen=True)
pl.subplot(0,0)
pl.add_mesh(mesh.copy(), scalars = '2_total_deformation_(mm)', **dargs)
pl.add_scalar_bar(title='total_deformation(mm)',n_labels=10, n_colors=9, fmt='%.4e', vertical=True, width=0.2,
position_x=0.05, position_y=0.5, font_family='times')
add_axes(pl)
pl.camera_position = custom_positon
pl.screenshot('results.png')
内容简介:通过pyansys库将ansys workbench的rth、rst结果文件中的场数据转为vtk文件,并使用pyvista库进行可视化展示,附件给出了相关代码及workbench案例文件。