基于Python的CAE后處理二次開發-ANSYS篇

      前面講到了基于Python進行Nastran .pch結果文件的自動后處理過程。可用于如IPI、VTF、NTF等自動后處理。原計劃繼續介紹Nastran結果文件.op2自動后處理的內容。但有朋友問到了ANSYS結果文件.rst的后處理內容。今天簡單介紹下基于Python的ANSYS結果自動后處理內容。這里用Python做后處理主要有以下幾個原因:1.可以進行數據深度處理,尤其是對于大量分析數據可以進行基于機器學習等內容的研究。2.可以完成商用后處理軟件無法完成的數據處理工作。3.可自動化后處理包括自動出報告等。4.可用于優化軟件的聯合。(誠然無論是ANSYS自帶的后處理模塊還是商業后處理軟件hyperview/hypergraph/meta/Animator4等都可以進行豐富的后處理工作,亦可以進行二次開發完成結果處理和自動報告生成。ANSYS經典界面的參數化編程語言APDL,Hyperworks的tcl語言,meta自帶的Python接口,Animator4的tcl語言等都可以進行二次開發。這里只是簡單介紹一下另外一個思路)。
      為了不過于單調,這里選了一個比較有意思的小例子介紹基于Python的ANSYS結果文件自動后處理過程。

Anterior Cruciate Ligament (ACL) 前交叉韌帶仿真分析

背景:運動和汽車事故是韌帶損傷的重要原因,前交叉韌帶(ACL)的損傷是最常見的韌帶損傷。在將人的膝蓋關節固定在一起的許多韌帶中,ACL尤為重要,因為它可以保持膝蓋的穩定性,并通過限制關節運動來幫助防止對膝蓋的傷害。ACL主要由連接股骨和脛骨的密集堆積的膠原纖維組成。ACL位于膝蓋關節內部,如下圖所示:

基于Python的CAE后處理二次開發-ANSYS篇的圖1

      研究表明,ACL極限抗張力強度(2020±264)N,最大形變(15.9±3.5)mm。ACL剛度為240N/mm,彈性模量為278MPa,極限抗張強度為35MPa[9]。所受應力變化與膝關節屈伸位置、肌肉收縮狀態、負重或者非負重都有關系。ACL材料屬性的研究不能全面反映運動狀態下ACL受力變化。研究表明,ACL應力變化在不同外力大小、屈曲角度下及不同分束之間是不相同的。屈伸運動中,110N和22N脛骨前向外力下,當屈曲15°時ACL應力最大,為(110.6±14.8)N和(25.7±3.7)N;在屈曲90°時應力最小,為(71.1±29.5)N和(12.8±7.3)N。不同分束在屈伸過程中應力變化也不相同。

       日常活動中ACL最大應力均小于極限應力,一般為極限應力0.0%~44%。正常情況下以股四頭肌收縮為主、屈曲度較小情況下(如股四頭肌等長收縮、蹲起、主動伸膝等)ACL受力較大;而以腘繩肌收縮為主、屈曲度較大情況下(如腘繩肌等長收縮、60°和90°時股四頭肌的等長收縮和股四頭肌、腘繩肌協同收縮等)ACL應力則很小。步態循環中早期階段(腳離地過程)ACL所受剪切力較大,在單腳離地時刻產生最大應力303N。后期階段(腳著地過程)由于肌肉收縮、地面反作用以及脛骨-股骨之間相互作用,此時ACL受力較小。了解生理活動下ACL受力變化規律,對術后正確康復,避免ACL危險位置和動作,防止負荷過大有重要意義。

問題描述:由于較大的變形和旋轉,ACL表現出高度的非線性和各向異性,并表現出明顯的應變率相關性。各向異性行為是由排列在柔軟材料基質中的膠原纖維族引起的。韌帶是粘彈性的,因此表現出與時間有關和與載荷歷史有關的機械性能。韌帶的粘彈性行為具有臨床意義,因為它們有助于防止韌帶的疲勞衰竭。

      本文的研究內容是使用具有粘彈性的各向異性超彈性材料模型來建模各向異性,非線性行為,大應變,對彎曲載荷的高順應性和不可壓縮性。
      ACL是膝蓋的四個主要穩定韌帶之一。當受到彎曲,拉伸和旋轉時,它限制了脛骨相對于股骨的運動。

有限元模型:ACL使用SOLID187單元進行網格畫分。股骨使用剛性面的。在股骨表面和ACL之間定義了標準接觸(KEYOPT(12)= 0)。


基于Python的CAE后處理二次開發-ANSYS篇的圖2

材料模型:使用各向異性超彈性材料模型用于ACL仿真。各向異性超彈性是一種基于勢的函數,具有用于定義體積部分,等容部分和材料方向的參數。各向異性超彈性的應變能勢由下式給出:

基于Python的CAE后處理二次開發-ANSYS篇的圖3

各向異性超彈材料模型常數:

基于Python的CAE后處理二次開發-ANSYS篇的圖4

ANSYS求解文件材料模型參數化:

基于Python的CAE后處理二次開發-ANSYS篇的圖5

邊界條件和載荷:ACL模型的脛骨(底部)側保持固定,并約束所有自由度。膝關節可彎曲,伸展和旋轉。因此,分析考察了ACL在單軸彎曲,拉伸和旋轉下的行為這三個工況。

工況一 :在ACL的上表面施加單軸位移載荷,總拉伸率為1.12。
工況二 :ACL發生45度彎曲(膝蓋彎曲)
工況三 :在1.5秒的時間內使股骨表面旋轉11.25度。
分析 結果:
工況一:拉伸
基于Python的CAE后處理二次開發-ANSYS篇的圖6
基于Python的CAE后處理二次開發-ANSYS篇的圖7
(注:這種云圖不是PS的,是在后處理軟件中完成的)

工況二:彎曲

基于Python的CAE后處理二次開發-ANSYS篇的圖8

基于Python的CAE后處理二次開發-ANSYS篇的圖9

在最大應力處容易發生損傷撕裂。

基于Python的CAE后處理二次開發-ANSYS篇的圖10

工況三:旋轉

基于Python的CAE后處理二次開發-ANSYS篇的圖11


基于Python的CAE后處理二次開發-ANSYS篇的圖12

Anterior Cruciate Ligament (ACL) 前交叉韌帶參數優化

       這里主要用于ACL各向異性超彈材料模型的參數擬合。即材料模型中的四個參數a1、c1、c2、d。通過Python直接讀取rst結果文件,并將ACL的應力應變結果輸出,用于材料參數擬合優化分析。關于材料參數優化本文就不做過多介紹,具體方法可以參考公眾號以往文章。包括基于LSOPT、Isight、Heeds、Optimus、Modefrontier的都已經備全了。當然,也可以直接在Python中進行擬合優化。
點擊以下鏈接查看:
Optimus:Material calibration using Optimus (and ABAQUS)
LSOPT:Material calibration using LSOPT (and ABAQUS)
Heeds:Material calibration using HEEDS (and ABAQUS)
modefrontier:Material calibration using modeFRONTIER (and ABAQUS)
Isight:Material calibration using Isight (and ABAQUS)
基于Python的ANSYS結果自動后處理開發

基于Python的CAE后處理二次開發-ANSYS篇的圖13

# -*- coding: utf-8 -*-"""Created on Fri Mar 12 09:38:40 2021@author: Ansyent"""import pyansys as paimport numpy as npimport matplotlib.pyplot as pltrst = pa.read_binary('F:/06_SoftWare_Temp/31_Python_CAE_Temp/python-ansys/ansys_case/acl_tension.rst')
def VonMises(s): stressmatrix = np.array([[s[0],s[3],s[5]],[-s[3],s[1],s[4]],[-s[5],-s[4],s[2]]]) ps = np.linalg.eig(stressmatrix)[0] misesstress = (((ps[0]-ps[1])**2 + (ps[1]-ps[2])**2 + (ps[2]-ps[0])**2)/2)**0.5 return misesstress

這里定義了一個求米塞斯應力強度的函數,因為通過Python直接讀取的rst結果中只有基礎解,即節點的6分應力分量。如果需要考察主應力、等效應力強度等需要對基礎解進行計算即可。

numresults = rst.n_resultsstresslist = []strainlist = []stresslist1 = []nnum, stress = rst.nodal_stress(-1)
for i in range(len(nnum)): if np.isnan(stress[i][0]): stresslist1.append(0) else: stresslist1.append(VonMises(stress[i]))
這里的stresslist1為最后一個子步所有節點的應力強度結果,從中找到最大應力的節點,用于后續輸出該節點的應力應變數據和曲線。
maxnodeid = stresslist1.index(max(stresslist1))
for i in range(numresults): stre = VonMises(rst.nodal_stress(i)[1][maxnodeid]) stra = rst.nodal_elastic_strain(i)[1][maxnodeid][6] stresslist.append(stre) strainlist.append(stra)

這里將應力應變寫到stressliststrainlist列表中。


width,height=10,7plt.rcParams['figure.figsize'] = width, heightplt.plot(strainlist,stresslist,'r',label='simulation-stress',marker='o')plt.title("Stress-Strain")plt.xlabel("Strain[-]")plt.ylabel("Stress[Mpa]")plt.legend()plt.show()

在spyder中運行的效果,優化聯合時后臺運行即可。

基于Python的CAE后處理二次開發-ANSYS篇的圖14

基于Python的CAE后處理二次開發-ANSYS篇的圖15
在優化聯合時,只需要將應力應變數據輸出到結果文件即可。

注:

1.ANSYS批處理提交命令語法為:“ANSYS_Install_Path\ANSYSxxx.exe” -np 2 -b -i acl_tension.dat -o acl_tension.out。

2.讀取ANSYS輸入文件、結果文件需要安裝pyansys庫。庫功能介紹:

  *Interactively control an instance of ANSYS v14.5 + using Python on        Linux, >=17.0 on Windows.

  *Extract data directly from binary ANSYS v14.5+ files and to display or animate them.

  *Rapidly read in binary result (.rst), binary mass and stiffness (.full), and ASCII block archive (.cdb) files.

3.文中云圖不是PS的,均為在后處理軟件中完成的。

登錄后免費查看全文
立即登錄
App下載
技術鄰APP
工程師必備
  • 項目客服
  • 培訓客服
  • 平臺客服

TOP

4
1
9