Ansys Mechanical物理場(chǎng)結(jié)果轉(zhuǎn)為vtk及可視化

1 背景:我們?yōu)楹涡枰D(zhuǎn)換仿真數(shù)據(jù)?

想象一下,你剛剛完成了一項(xiàng)復(fù)雜的仿真研究,使用了像試驗(yàn)設(shè)計(jì)(DOE)這樣的方法,生成了成百上千個(gè)模擬結(jié)果。這些數(shù)據(jù)寶藏蘊(yùn)含著巨大的潛力,可以用來:

  • 訓(xùn)練一個(gè)快速的降階模型(ROM)來進(jìn)行實(shí)時(shí)預(yù)測(cè)。
  • 構(gòu)建一個(gè)能與物理世界同步的數(shù)字孿生體。
  • 前端頁面云圖可視化展示。
  • 直接利用Python中的AI庫(如TensorFlow/PyTorch)進(jìn)行數(shù)據(jù)挖掘和智能分析。

但當(dāng)你興沖沖地準(zhǔn)備處理這些數(shù)據(jù)時(shí),卻遇到了一個(gè)常見的“攔路虎”:Ansys等專業(yè)仿真軟件生成的結(jié)果文件(如.rst, .rth, .odb)是特殊的二進(jìn)制格式。

你可以這樣理解:這種格式就像是軟件為自己的讀寫速度而設(shè)計(jì)的“內(nèi)部語言”,效率雖高,但外界卻“聽不懂”。這導(dǎo)致了數(shù)據(jù)孤島——你的寶貴數(shù)據(jù)被鎖在這些文件里,無法被Python、MATLAB等主流數(shù)據(jù)分析工具直接讀取和使用。

2 目的:本教程要做什么?

那么,如何打破這個(gè)壁壘,將數(shù)據(jù)從“專用格式”解放到“通用世界”呢?這就是本文的核心目標(biāo)。

我們將手把手教你,如何利用Ansys官方推出的開源Python工具包——PyAnsys,輕松地將你的.rst和.rth結(jié)果文件,轉(zhuǎn)換為通用的VTK格式。

為什么選擇VTK格式?

VTK是科學(xué)計(jì)算可視化領(lǐng)域的“通用語言”。它能完美保留模型的三維網(wǎng)格結(jié)構(gòu)和物理場(chǎng)數(shù)據(jù)的空間分布,可以被ParaView等眾多可視化軟件直接打開,也極易被各種編程環(huán)境(包括Python)讀取,用于后續(xù)分析。

我們將使用的“神器”:PyAnsys生態(tài)。

簡(jiǎn)單來說,PyAnsys是Ansys官方用Python打造的一套“自動(dòng)化控制工具”,它讓你能用Python腳本操控幾乎所有Ansys產(chǎn)品的工作流。在本教程中,我們將聚焦于其中的兩個(gè)核心模塊:

  • PyDPF-Core:這是數(shù)據(jù)處理的基礎(chǔ)引擎。它非常靈活,可以直接讀取和操作Ansys的結(jié)果數(shù)據(jù),是我們進(jìn)行格式轉(zhuǎn)換的基石。
  • PyDPF-Post:這是建立在PyDPF-Core之上的 “快捷后處理工具包”。它提供了更簡(jiǎn)單、直觀的命令來提取你關(guān)心的結(jié)果(比如最大應(yīng)力、平均溫度等),讓代碼寫起來更輕松。

通過本文,你將不僅學(xué)會(huì)一個(gè)數(shù)據(jù)轉(zhuǎn)換的技巧,更能理解如何利用PyAnsys這個(gè)強(qiáng)大的生態(tài),將仿真工作流與現(xiàn)代化的數(shù)據(jù)科學(xué)工具鏈無縫連接起來。

3 ANSYS Mechanical結(jié)果數(shù)據(jù)導(dǎo)出文本格式

以下使用PyDPF-core/post讀取Mechanical的rth及rst結(jié)果數(shù)據(jù),并導(dǎo)出為vtk文件的示例(需要安裝pyansys庫,Ansys版本>=2021R1)。

通過Ansys Workbench(2023R1)軟件建立壓力容器熱固耦合分析,獲得溫度及結(jié)構(gòu)結(jié)果。

Ansys Mechanical物理場(chǎng)結(jié)果轉(zhuǎn)為vtk及可視化的圖1

Ansys計(jì)算結(jié)果云圖如下:



Ansys Mechanical物理場(chǎng)結(jié)果轉(zhuǎn)為vtk及可視化的圖2

總變形云圖


Ansys Mechanical物理場(chǎng)結(jié)果轉(zhuǎn)為vtk及可視化的圖3

等效應(yīng)力云圖


Ansys Mechanical物理場(chǎng)結(jié)果轉(zhuǎn)為vtk及可視化的圖4

溫度云圖

通過pyansys庫將上述三個(gè)物理場(chǎng)結(jié)果導(dǎo)出為一個(gè)vtk文件,并通過pyvista庫進(jìn)行繪制,如下:

Ansys Mechanical物理場(chǎng)結(jié)果轉(zhuǎn)為vtk及可視化的圖5

部分代碼如下:

# ----- 將rth及rst結(jié)果導(dǎo)出為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'

# 加載結(jié)果文件,并獲取結(jié)果
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                  # 等效應(yīng)力
……


# ---- 繪制vtk(建議與上方的代碼分開執(zhí)行) -----
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')

以下內(nèi)容為付費(fèi)內(nèi)容,請(qǐng)購買后觀看

包含1個(gè)文件

通過pyansys庫將ansys workbench的rth、rst結(jié)果文件中的場(chǎng)數(shù)據(jù)轉(zhuǎn)為vtk文件,并使用pyvista庫進(jìn)行可視化展示,附件給出了相關(guān)代碼及workbench案例文件。

Ansys Mechanical物理場(chǎng)結(jié)果轉(zhuǎn)為vtk.zip
28.47MB
App下載
技術(shù)鄰APP
工程師必備
  • 項(xiàng)目客服
  • 培訓(xùn)客服
  • 平臺(tái)客服

TOP

1