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