基于Python二次開發進行CAE結果自動后處理
前面講到了基于meta和hypergraph進行NVH分析(IPI、VTF、NTF)自動后處理,包括結果提取和自動出報告等功能。
基于META自動后處理:
Python二次開發在NVH分析VTF、NTF后處理中的應用
上面的后處理過程都是基于商業軟件進行的,很多數據加工的功能受限于軟件的函數接口,因此不夠豐富。同時,基于hypergraph或meta的后處理都需要啟動軟件來完成數據處理,如果進行優化集成則(后臺)啟動后處理軟件也需要一些時間。
這里介紹一些基于Python的CAE結果后處理方法,而不是基于商業軟件來完成。包括Nastran結果文件.op2和.pch,LSDYNA結果文件d3plot和binout等自動后處理過程。ABAQUS的開發語言支持Python,因此對于ABAQUS的.odb結果自動后處理就不做過多的介紹。這些自動后處理過程既可用于常規分析自動后處理,也可以用于多學科優化時優化流程的集成,且這些過程不需要商業軟件,只需要簡單的配置下Python環境即可。
本文介紹基于Python的Nastran結果文件.pch自動后處理,包括IPI、VTF等。
# -*- coding: utf-8 -*-"""Created on Tue Mar 9 12:31:51 2090@author: Ansyent"""import nastran_pch_readerimport mathimport numpy as npimport matplotlib.pyplot as plt#獲得pch文件p = nastran_pch_reader.PchParser('F:/07_TempFileCheck/IPI_NTF_VTF/XXX_IPI.pch')#設置動剛度目標值和節點列表target = 7000nodeidlist = ['1001','1002','1003','1004','2001','2002','2003','3001','3002'\,'3003','3004','4001','4002','4003','4004','4005','4006']#獲得工況列表subcaselist = p.get_subcases()#構造計算面積函數def integrate(x,y):area = np.trapz(y=y,x=x)return area
for i in range(int(len(subcaselist)/3)):ax = p.get_accelerations(subcaselist[3*i+0])ay = p.get_accelerations(subcaselist[3*i+1])az = p.get_accelerations(subcaselist[3*i+2])freq = list(ax.keys())
其中ax、ay、az是通過get_accelerations函數得到的一個包含所有分析輸出頻率個數的字典,字典的鍵為頻率,值為包含六個方向的加速度值,即三個平動三個轉動加速度值的列表。并且是通過實部虛部給出的,我們要的是幅值和相位表達,因此后續需要通過abs函數求出對應的幅值。
在spyder環境下運行的效果。
# -*- coding: utf-8 -*-"""Created on Wed Mar 10 13:14:55 2090@author: Ansyent"""import nastran_pch_readerimport scipy.signal as sgnimport matplotlib.pyplot as plt#獲得pch文件p = nastran_pch_reader.PchParser('F:/07_TempFileCheck/IPI_NTF_VTF/TB_VTF.PCH')#設置VTF目標值target = 8nodeidlist = ['101','102','201','202','301','302','303','304','501','502'\,'503','504','601','602','603','604','1002','1003','1005'\,'1006','1007','1101','1102','1103','1104']#獲得工況列表subcaselist = p.get_subcases()directionlist = ['X','Y','Z']for j in range(int(len(subcaselist)/3)):for i , direction in enumerate(directionlist):acc_motivation = p.get_accelerations(subcaselist[3*j+i])freq = list(acc_motivation.keys())targetcurve = [target]*len(freq)acc_x = [abs(acc_motivation[f][0]) for f in freq]acc_y = [abs(acc_motivation[f][1]) for f in freq]acc_z = [abs(acc_motivation[f][2]) for f in freq]for acc in [acc_x,acc_y,acc_z]:numpeaks = sgn.find_peaks(acc,distance=3)xpotion = list(numpeaks[0])yvalue = [acc[freq.index(i)] for i in xpotion]for y in yvalue:if y > target:s = plt.scatter(xpotion[yvalue.index(y)], y, marker='*',c='r')
width,height=10,6.6plt.rcParams['figure.figsize'] = width, heightplt.plot(freq,acc_x,'r',label=nodeidlist[j]+direction+"-x")plt.plot(freq,acc_y,'g',label=nodeidlist[j]+direction+"-y")plt.plot(freq,acc_z,'y',label=nodeidlist[j]+direction+"-z")plt.plot(freq,targetcurve,'--k',label="Target" + str(target))plt.title("N" + nodeidlist[j])plt.xlabel("Frequency[Hz]")plt.ylabel("Acceleration[mm/s^2]")plt.xlim(freq[0],freq[-1])plt.ylim(bottom=0)plt.legend()#plt.savefig('F:/07_TempFileCheck/IPI/' + nodeidlist[i] + '.png')plt.show()
以上只是簡單介紹了.pch文件的讀取和結果自動后處理過程,整個過程只需要幾行Python代碼即可完成。運行時間也就幾秒鐘。而不需要在商業軟件中來進行。如果是進行優化集成,則不要輸出結果圖片等信息,只需要輸出結果響應即可,會大大提高效率。同時,如果需要自動生成報告和結果統計等,只需要在次基礎上添加簡單的幾行命令即可,十分方便簡潔。
后續介紹ls-dyna結果d3plot和binout自動后處理方法。
工程師必備
- 項目客服
- 培訓客服
- 平臺客服
TOP




















