ANSYS剛度矩陣的提取與解析(python解析)
2017-09-15 by:CAE仿真在線 來源:互聯(lián)網(wǎng)
在workbench中實現(xiàn)整個過程的參數(shù)化過程除了前幾次文章介紹的模型與網(wǎng)格,還應(yīng)該包括材料參數(shù)的參數(shù)化定義。利用Python進(jìn)行二次開發(fā)能夠?qū)崿F(xiàn)材料參數(shù)的自由定義,比如來源于excel表格或者文檔的數(shù)據(jù),通過Python代碼的自動讀取,參與到實際的有限元分析進(jìn)程中。
結(jié)構(gòu)有限元最后的求解過程總是歸結(jié)到求解一個大型矩陣方程Ax=b,對于一些情況還需要考慮質(zhì)量矩陣M和阻尼矩陣C。有限元程序在組裝完所有單元的剛度矩陣后,考慮模型所施加的約束和載荷,最終將剛度矩陣進(jìn)行一些處理,例如乘大數(shù)法,變成Ax=b的形式,其中A是剛度矩陣,b是節(jié)點載荷,x為待求的節(jié)點位移,A和b全為已知量。
基本上各類有限元軟件均能夠提取模型的剛度矩陣,此次針對剛度矩陣的提取與解析做一個例子,采用的軟件是ANSYS經(jīng)典。
在ANSYS中建立一個簡單的模型,劃分網(wǎng)格后共12個節(jié)點,定義材料參數(shù),施加約束和載荷后求解。有限元模型如下所示。
圖1
待求解結(jié)束后,會在工作目錄下生成一個后綴為full的文件,之后即可進(jìn)行剛度矩陣的提取。
通過主菜單,如下所示。
圖2
選擇Matrix后,彈出如下所示的界面。
圖3
其中,File to be read需要指定工作目錄下生成的full文件,Name of file to write為所導(dǎo)出剛度矩陣的文件名稱;Output matrix file format表示文件格式,還有Binary,生成的是文檔文件,選擇Ascii即可;Matrix to write表示輸出的是剛度矩陣/質(zhì)量矩陣還是阻尼矩陣;RHS選項表示是否同時輸出右端項,也即是Ax=b中的b。
打開生成的剛度矩陣文檔,如下所示。
圖4
該文件的第1行:格式A72,解釋性文字。
第2行:一共5個數(shù)值,格式5I14,其中585表示文件的總行數(shù)(不包括頭文件,也即是前面5行不算);25表示矩陣列指針的總行數(shù),通常是矩陣的階數(shù)+1,其具體的數(shù)值位置是從第6行到30行;268表示矩陣行索引的總行數(shù);第二個268表示矩陣元素的總行數(shù);24表示右端項的數(shù)值總行數(shù)。
第3行:RSA表示矩陣的形式,其中R表示實數(shù)矩陣,S表示為對稱矩陣,A表示為組裝的矩陣;后面的兩個24分別表示矩陣行數(shù)、矩陣列數(shù),268表示矩陣的元素。
第4行:格式說明
第5行:幾個數(shù)表示右端項的輸出說明,F表示全部存儲。
搞清楚頭文件中的各個參數(shù)的實際意義,再結(jié)合各行的內(nèi)容,能夠清楚地知道矩陣的所有元素的數(shù)值。
通過簡單的程序就可以將該文件進(jìn)行解析,生成自己想要的格式。
這里補充說明一下,對于對稱稀疏矩陣,在儲存的時候只保留下三角非零元素。
本次解析所用的語言為python.
#!user/bin/python
#-* -coding:UTF-8 -*-
#打開矩陣文件
inpfile = open("E:\CAE_Tech\process_files\232Files\matrix.txt")
#讀取所有內(nèi)容
lines = inpfile.readlines()
inpfile.close()
#打開輸出文件
outfile = open("E:\CAE_Tech\process_files\232Files\outmatrix.txt",’w’)
#解析矩陣文件的第二行
row_second = lines[1].split()
#得到矩陣的總行數(shù)(扣除頭文件),此次實例中為585
Tol_content = int(row_second[0])
#得到列指針的總行數(shù)
Col_tol = int(row_second[1])
#得到矩陣元素總數(shù)
Row_tol = int(row_second[3])
#得到右端項的行數(shù)
Rhs_tol = int(row_second[4])
#初始化矩陣每列非零元素的起始行數(shù)
Star_row_num = [1] * Col_tol
#獲取行起始數(shù)組
for i in range (Col_tol):
temp = lines[i+5].split()
Star_row_num[i] = int(temp[0])
for i in range (Rhs_tol):
temp_len = Star_row_num[i+1] - Star_row_num[i]
temp_len1 = Star_row_num[1] - Star_row_num[0]
temp_len2 = Star_row_num[i] - Star_row_num[0]
row_start_num = 5 + Col_tol + temp_len2
Each_col_num = i + 1
Each_col_num_str = str(Each_col_num)
for j in range (temp_len):
Each_row_num_str = lines[row_start_num + j].split()
Each_row_num = int(Each_row_num_str[0])
Each_row_num_str = str(Each_row_num)
Each_ele_num = Row_tol +5 + Col_tol + temp_len2 + j
Each_ele_str = lines[Each_ele_num].split()
Each_ele_value = Each_ele_str[0]
#得到每一行應(yīng)該輸出的列號,行號以及元素值
Each_row_list = Each_row_num_str,Each_col_num_str,Each_ele_value,'\n'
a = ' '
Each_line = a.join(Each_row_list)
outfile.write(Each_line)
#輸出右端項
for i in range (Rhs_tol):
Rhs_num = Tol_content + 5 -Rhs_tol +i
Rhs_each_row = lines[Rhs_num]
#去掉字符串前面的空格
Rhs_each_row = Rhs_each_row.lstrip()
outfile.write(Rhs_each_row)
outfile.close()
解析后生成的文件如下所示:
圖5
相關(guān)標(biāo)簽搜索:ANSYS剛度矩陣的提取與解析(python解析) Ansys有限元培訓(xùn) Ansys workbench培訓(xùn) ansys視頻教程 ansys workbench教程 ansys APDL經(jīng)典教程 ansys資料下載 ansys技術(shù)咨詢 ansys基礎(chǔ)知識 ansys代做 Fluent、CFX流體分析 HFSS電磁分析 Abaqus培訓(xùn)