有没有牛人用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,有问题,但是不会改。谁用过这个程序? 这代码网上随处可见啊,我不明白的是,为什么将矩阵从ANSYS中提取出来后,又要以满阵的形式还原到ANSYS中呢?
个人曾经做过一个小总结,见:
再论ANSYS中的总体矩阵提取(In Python)
http://forum.vibunion.com/forum-viewthread-tid-101485-fromuid-159019.html
回复 1 # 86029 的帖子
我原来做过,提取以后要还原的,包括刚度矩阵,质量矩阵,还有右边项,提取以后可以对刚度矩阵质量矩阵进行操作,比如降阶,求振型什么的 用HBMAT没问题,可是运行后do loop index same as outer index ICOL,这个原因是$。
我从ANSYS提取总刚,打算让matlab调用总刚计算,但是估计总刚矩阵出来得1G.但是求解出的总刚阶数不包括约束
所以还是打算提单元刚阵,让matlab组集 谁能从一个已经求解的模型中,提取指定单元的单元刚阵?
Anyone knows how to extract a specified element stiffness matrix from a solved
model?
你好,我也遇到了你这个问题,请问你最后怎么解决的? 很简单的,将有$的地方回车为另外一行,并删除$即可。
可能是作者为压缩篇幅采用了许多$将多个命令放在了一行,但ANSYS某些命令后面不容许有续行的。
可直接从网上下载无$符的命令流使用,如okok上。 marain 发表于 2013-4-1 11:33 static/image/common/back.gif
很简单的,将有$的地方回车为另外一行,并删除$即可。
可能是作者为压缩篇幅采用了许多$将多个命令放在了一 ...
谢谢你,真的没有那个错误了,可是那个提取出来的满矩阵存放在哪儿呢,我想查看这个矩阵,可是找不到存放满矩阵的文件 菲尼克斯方 发表于 2013-4-2 11:20 static/image/common/back.gif
谢谢你,真的没有那个错误了,可是那个提取出来的满矩阵存放在哪儿呢,我想查看这个矩阵,可是找不到存放 ...
请问你的这个问题解决了吗,我现在将稀疏矩阵转为满矩阵的时候也遇到问题
页:
[1]