ANSYS刚度矩阵的提取与解析(python解析)

2017-09-15  by:CAE仿真在线  来源:互联网

在workbench中实现整个过程的参数化过程除了前几次文章介绍的模型与网格,还应该包括材料参数的参数化定义。利用Python进行二次开发能够实现材料参数的自由定义,比如来源于excel表格或者文档的数据,通过Python代码的自动读取,参与到实际的有限元分析进程中。


结构有限元最后的求解过程总是归结到求解一个大型矩阵方程Ax=b,对于一些情况还需要考虑质量矩阵M和阻尼矩阵C。有限元程序在组装完所有单元的刚度矩阵后,考虑模型所施加的约束和载荷,最终将刚度矩阵进行一些处理,例如乘大数法,变成Ax=b的形式,其中A是刚度矩阵,b是节点载荷,x为待求的节点位移,A和b全为已知量。

基本上各类有限元软件均能够提取模型的刚度矩阵,此次针对刚度矩阵的提取与解析做一个例子,采用的软件是ANSYS经典。

在ANSYS中建立一个简单的模型,划分网格后共12个节点,定义材料参数,施加约束和载荷后求解。有限元模型如下所示。

ANSYS刚度矩阵的提取与解析(python解析)ansys培训的效果图片1

图1

待求解结束后,会在工作目录下生成一个后缀为full的文件,之后即可进行刚度矩阵的提取。

通过主菜单,如下所示。

ANSYS刚度矩阵的提取与解析(python解析)ansys培训的效果图片2

图2

选择Matrix后,弹出如下所示的界面。

ANSYS刚度矩阵的提取与解析(python解析)ansys培训的效果图片3

图3

其中,File to be read需要指定工作目录下生成的full文件,Name of file to write为所导出刚度矩阵的文件名称;Output matrix file format表示文件格式,还有Binary,生成的是文档文件,选择Ascii即可;Matrix to write表示输出的是刚度矩阵/质量矩阵还是阻尼矩阵;RHS选项表示是否同时输出右端项,也即是Ax=b中的b。

打开生成的刚度矩阵文档,如下所示。

ANSYS刚度矩阵的提取与解析(python解析)ansys分析案例图片4

图4

该文件的第1行:格式A72,解释性文字。

第2行:一共5个数值,格式5I14,其中585表示文件的总行数(不包括头文件,也即是前面5行不算);25表示矩阵列指针的总行数,通常是矩阵的阶数+1,其具体的数值位置是从第6行到30行;268表示矩阵行索引的总行数;第二个268表示矩阵元素的总行数;24表示右端项的数值总行数。

第3行:RSA表示矩阵的形式,其中R表示实数矩阵,S表示为对称矩阵,A表示为组装的矩阵;后面的两个24分别表示矩阵行数、矩阵列数,268表示矩阵的元素。

第4行:格式说明

第5行:几个数表示右端项的输出说明,F表示全部存储。

搞清楚头文件中的各个参数的实际意义,再结合各行的内容,能够清楚地知道矩阵的所有元素的数值。

通过简单的程序就可以将该文件进行解析,生成自己想要的格式。

这里补充说明一下,对于对称稀疏矩阵,在储存的时候只保留下三角非零元素。

本次解析所用的语言为python.

#!user/bin/python

#-* -coding:UTF-8 -*-

#打开矩阵文件

inpfile = open("E:\CAE_Tech\process_files\232Files\matrix.txt")

#读取所有内容

lines = inpfile.readlines()

inpfile.close()


#打开输出文件

outfile = open("E:\CAE_Tech\process_files\232Files\outmatrix.txt",’w’)


#解析矩阵文件的第二行

row_second = lines[1].split()

#得到矩阵的总行数(扣除头文件),此次实例中为585

Tol_content = int(row_second[0])

#得到列指针的总行数

Col_tol = int(row_second[1])

#得到矩阵元素总数

Row_tol = int(row_second[3])

#得到右端项的行数

Rhs_tol = int(row_second[4])


#初始化矩阵每列非零元素的起始行数

Star_row_num = [1] * Col_tol

#获取行起始数组

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]


#得到每一行应该输出的列号,行号以及元素值

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()

解析后生成的文件如下所示:

ANSYS刚度矩阵的提取与解析(python解析)ansys分析案例图片5

图5


开放分享:优质有限元技术文章,助你自学成才

相关标签搜索:ANSYS刚度矩阵的提取与解析(python解析) Ansys有限元培训 Ansys workbench培训 ansys视频教程 ansys workbench教程 ansys APDL经典教程 ansys资料下载 ansys技术咨询 ansys基础知识 ansys代做 Fluent、CFX流体分析 HFSS电磁分析 Abaqus培训 

编辑
在线报名:
  • 客服在线请直接联系我们的客服,您也可以通过下面的方式进行在线报名,我们会及时给您回复电话,谢谢!
验证码

全国服务热线

1358-032-9919

广州公司:
广州市环市中路306号金鹰大厦3800
电话:13580329919
          135-8032-9919
培训QQ咨询:点击咨询 点击咨询
项目QQ咨询:点击咨询
email:kf@1cae.com