nieyiguo 发表于 2010-4-29 09:00:28

matlab对ansys提到的质量矩阵的后处理

hbmat得到的文件是一列的,还需要扩充为一个矩阵,用ansys可以达到这个目的(王新敏教材):
/aux2 !进入aux2处理器
file,ex2,full !指定文件ex.full
hbmat,ex2,txt,,ascii,stiff,yes!转换刚度矩阵刚度矩阵为ex.txt
finish
!
*dim,contline,,5 !定义一维数组
*vread,contline(1),ex2,txt,,,5,,,1!跳过第一行后读入5个数据
(5f14.0)
ptrcrd=contline(2)!保存列指针总数
indcrd=contline(3)!保存行索引总数
valcrd=contline(4)!保存矩阵元素总行数
rhscrd=contline(5)!保存右边项总数
*vread,contline(1),ex2,txt,,,4,,,2 !跳过第二行读入四个数据
(a3,11x,4f14.0)
nrow=contline(2)
ncol=contline(3) !保存刚度矩阵的行列数
strline=$contline= !删除数组
*if,rhscrd,eq,0,then!如果没右边项取lso=4,否则取lso=5
lso=4
*else
    lso=5
*endif
*dim,pointr,,ptrcrd !定义列指针数组
*dim,rowind,,indcrd !定义行索引数组
*dim,values,,valcrd !定义矩阵元素数组
*dim,rhsval,,rhscrd !定义右边项数组

*vread,pointr(1),ex2,txt,,,ptrcrd,,,lso
(f14.0)!读入列指针数组
*vread,rowind(1),ex2,txt,,,indcrd,,,lso+ptrcrd
(f14.0)!读入行索引数组
*vread,values(1),ex2,txt,,,valcrd,,,lso+ptrcrd+indcrd
(d25.15) !读入矩阵元素数组
*vread,rhsval(1),ex2,txt,,,rhscrd,,,lso+ptrcrd+indcrd+valcrd
(d25.15) !读入右边项元素数组
*dim,smatr,,nrow,ncol !定义矩阵行列数
*do,icol,1,ncol !以列数循环
stacol=pointr(icol) !得到当前列指针(元素的序号)
endcol=pointr(icol+1)!得到下一列指针
*do,irow,stacol,endcol-1 !以当前列中的非零元素循环
   truerow=rowind(irow) !得到当前元素的行号
   smatr(truerow,icol)=values(irow) !按行列号将元素保存到矩阵中
*enddo
*enddo !结束两个循环
*do,irow,1,nrow
*do,icol,1,ncol
   smatr(irow,icol)=smatr(icol,irow)
*enddo
*enddo!形成上三角矩阵,从而得到满矩阵

nieyiguo 发表于 2010-4-29 09:00:39

本帖最后由 nieyiguo 于 2010-4-29 09:01 编辑

不过,自由度数目过大时,就会出现假死的情况,这是因为ansys毕竟不是专业的数值处理软件,这时可以用matlab处理数据:
clear
a=importdata('exmass.txt');%exmass.txt---hbmat得到的文件(去除文字行)
lie=a(1:668);      %668,列指针行数
hang=a((668+1):(668+1891));      %%1891,行索引行数
yuansu=a((668+1891+1):(668+1891+1891));   %1891,矩阵元素行数
for i=1:667
d=lie(i);
b=lie(i+1);
for j=d:(b-1)
c=hang(j);
MassMatrix(c,i)=yuansu(j);
end
end
for j=1:667   
for i=1:667   %667,667,矩阵行列数
MassMatrix(j,i)=MassMatrix(i,j);
end
end
clear a
clear b
clear c
clear d
clear hang
clear i
clear j
clear lie
clear yuansu

xieyubing734 发表于 2010-5-8 18:02:27

这个,真的只是学习下了~

appleyd 发表于 2010-7-10 10:36:09

hbmat得到的文件是一列的,还需要扩充为一个矩阵,用ansys可以达到这个目的(王新敏教材):
/aux2 !进入aux2处理器
file,ex2,full !指定文件ex.full
hbmat,ex2,txt,,ascii,stiff,yes!转换刚度矩阵刚度矩阵为ex.txt
...
nieyiguo 发表于 2010-4-29 09:00 http://forum.simwe.com/images/common/back.gif
请问下   这段命令如何运行   需要建宏文件?

lijian1a2b 发表于 2010-7-25 11:47:34

很好啊,就算不直接这么用,也可以用这种思路处理别的问题啊。

田间阡陌 发表于 2010-8-22 10:21:26

楼主的思路,学习一下。
页: [1]
查看完整版本: matlab对ansys提到的质量矩阵的后处理