86029 发表于 2011-5-6 21:59

有没有牛人用HBMAT提取总刚阵,然后还原为满矩阵

《ANSYS工程结构数值分析》中的一个例子
代码如下:

!EX6.10 提取结构刚度矩阵及处理
FINISH$/CLEAR$/FILNAME,HBFILE$/PREP7                        !定义工作文件名HBFILE.TXT
ET,1,BEAM3$MP,EX,1,2E5$R,1,1E-2,32E-5,0.5                !定义单元类型、材料、实常数
N,1$N,2,0,4$N,3,4,4$N,4,4,0$EN,1,2,3$EN,2,1,2$EN,3,4,3      !按图6-9所示创建有限元模型
F,2,FX,5$SFBEAM,1,1,PRES,10,,,,2,-1$SFBEAM,2,1,PRES,3      !施加节点荷载和单元荷载
D,1,ALL$D,4,ALL                                                !施加约束
/SOLU$SOLVE$FINISH$/AUX2                              !进入求解层求解后再进入AUX2处理器
FILE,HBFILE,FULL                                        !指定文件HBFILE.FULL
HBMAT,HBFILE,TXT,,ASCII,STIFF,YES                        !转换刚度矩阵和右边项为HBFILE.TXT文件
FINISH
!以下从HBFILE.TXT读入数据,并还原为满矩阵存储
*DIM,CONTLINE,,5                                        !定义一维数组
*VREAD,CONTLINE(1),HBFILE,TXT,,,5,,,1                        !跳过第1行后读入5个数据
(5F14.0)
PTRCRD=CONTLINE(2)                                        !保存列指针总行数
INDCRD=CONTLINE(3)                                        !保存行索引总行数
VALCRD=CONTLINE(4)                                        !保存矩阵元素总行数
RHSCRD=CONTLINE(5)                                        !保存右边项总行数
*VREAD,CONTLINE(1),HBFILE,TXT,,,4,,,2                        !跳过第2行后读入4个数据
(A3,11X,4F14.0)
NROW=CONTLINE(2)$NCOL=CONTLINE(3)                        !保存刚度矩阵的行列数
STRLINE=$CONTLINE=                                        !删除数组
*IF,RHSCRD,EQ,0,THEN                                        !如果无右边项取LS0=4行,否则取LS0=5
LS0=4$*ELSE$LS0=5$*ENDIF
*DIM,POINTR,,PTRCRD                                        !定义列指针数组
*DIM,ROWIND,,INDCRD                                        !定义行索引数组
*DIM,VALUES,,VALCRD                                        !定义矩阵元素值数组
*DIM,RHSVAL,,RHSCRD                                        !定义右边项元素值数组
*VREAD,POINTR(1),HBFILE,TXT,,,PTRCRD,,,LS0
(F14.0)                                                               !读入列指针数据
*VREAD,ROWIND(1),HBFILE,TXT,,,INDCRD,,,LS0+PTRCRD
(F14.0)                                                               !读入行索引数据
*VREAD,VALUES(1),HBFILE,TXT,,,VALCRD,,,LS0+PTRCRD+INDCRD
(D25.15)                                                               !读入矩阵元素数据
*VREAD,RHSVAL(1),HBFILE,TXT,,,RHSCRD,,,LS0+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
!以下为删除临时变量和数组变量
POINTR=$ROWIND=$VALUES=$RHSVAL=$ICOL=$IROW=$LS0=$STACOL=
ENDCOL=$TRUEROW=$TOTCRD=$PTRCRD=$INDCRD=$VALCRD=$RHSCRD=

用HBMAT没问题,可是运行后do loop index same as outer index ICOL,有问题,但是不会改。谁用过这个程序?

Rainyboy 发表于 2011-5-8 11:11

这代码网上随处可见啊,我不明白的是,为什么将矩阵从ANSYS中提取出来后,又要以满阵的形式还原到ANSYS中呢?
个人曾经做过一个小总结,见:

再论ANSYS中的总体矩阵提取(In Python)
http://forum.vibunion.com/forum-viewthread-tid-101485-fromuid-159019.html

zhuweihong2004 发表于 2011-5-9 01:04

回复 1 # 86029 的帖子

我原来做过,提取以后要还原的,包括刚度矩阵,质量矩阵,还有右边项,提取以后可以对刚度矩阵质量矩阵进行操作,比如降阶,求振型什么的

86029 发表于 2011-5-10 11:41

用HBMAT没问题,可是运行后do loop index same as outer index ICOL,这个原因是$。
我从ANSYS提取总刚,打算让matlab调用总刚计算,但是估计总刚矩阵出来得1G.但是求解出的总刚阶数不包括约束
所以还是打算提单元刚阵,让matlab组集

86029 发表于 2011-5-11 21:22

谁能从一个已经求解的模型中,提取指定单元的单元刚阵?
Anyone knows how to extract a specified element stiffness matrix from a solved
model?

菲尼克斯方 发表于 2013-3-31 20:36

你好,我也遇到了你这个问题,请问你最后怎么解决的?

marain 发表于 2013-4-1 11:33

很简单的,将有$的地方回车为另外一行,并删除$即可。
可能是作者为压缩篇幅采用了许多$将多个命令放在了一行,但ANSYS某些命令后面不容许有续行的。
可直接从网上下载无$符的命令流使用,如okok上。

菲尼克斯方 发表于 2013-4-2 11:20

marain 发表于 2013-4-1 11:33 static/image/common/back.gif
很简单的,将有$的地方回车为另外一行,并删除$即可。
可能是作者为压缩篇幅采用了许多$将多个命令放在了一 ...

谢谢你,真的没有那个错误了,可是那个提取出来的满矩阵存放在哪儿呢,我想查看这个矩阵,可是找不到存放满矩阵的文件

年少才轻狂 发表于 2013-7-3 15:35

菲尼克斯方 发表于 2013-4-2 11:20 static/image/common/back.gif
谢谢你,真的没有那个错误了,可是那个提取出来的满矩阵存放在哪儿呢,我想查看这个矩阵,可是找不到存放 ...

请问你的这个问题解决了吗,我现在将稀疏矩阵转为满矩阵的时候也遇到问题
页: [1]
查看完整版本: 有没有牛人用HBMAT提取总刚阵,然后还原为满矩阵