与*DMAT用法非常相似,*SMAT用于创建稀疏矩阵且功能略少。其命令格式如图1所示。
*SMAT命令可以导入自由度集之间的映射关系向量,例如前文(*DMAT创建稠密矩阵手段强大,提取单元或结构刚度矩阵易如反掌)中*DMAT虽然可以提出刚度矩阵,但与刚度矩阵对应的自由度是如何排列的呢?这个在*DMAT命令中没有给出,而前文例题建模生成的自由度集恰好基本一致,所以与例题手算结果完全对应。即便如此,自由度(未知数)是如何对应的,也未给出,但利用*SMAT可以导入这种映射矩阵。
ANSYS有3种自由度集,分别是用户序列集、内部序列集、求解序列集,说明如下。
A.用户序列(user ordering)也称外部序列,其排序基于用户节点号,例如后处理中的位移列表(PRNSOL,U)就是所谓用户序列。按此序列排列的所有自由度称为“用户序列集”。(“序列集”-包含了自由度数目、排列顺序等)
B.内部序列(internal ordering)是压缩了用户序列集中的未使用节点号,并且基于排序的单元集重新对这些自由度排序,此排序主要是为了获得更好的缓存性能;用户序列集和内部序列集之间的映射关系称为“节点等价表(nodal equivalence table)”。除了自由度外,还有按内部序列组织的矩阵,如.MODE矩阵。
C.求解序列(solver ordering)是通过对方程(自由度)重新排序,以减小求解时间和硬盘需求;此外也考虑约束、耦合和约束方程等影响,减小了自由度集;此序列集中的所有自由度均为“独立自由”的自由度,是通过求解位移方程得到的,也称BCS序列集。而按BCS序列组织的矩阵也有很多,如从FULL文件提取的矩阵。
下面通过一个计算实例(需要命令流的请留言),看看这些自由度集的真实面目。
(1)这3种序列确实不同,不仅自由度集中自由度的个数不同,排列顺序也不相同。即各序列集的自由度序号对应的“节点.自由度”不一定相同(不一定的意思是,有些特殊情况下是相同的,即不必让ANSYS进行任何优化编排),虽然可以查看各序列自由度的解,但这些解对应的“节点.自由度”不一定相同。图2中给出了例题中各序列集中的自由度解。
(2)3种序列自由度解与“节点.自由度”如何对应?用户序列集很容易,就是按节点编号×节点自由度排序。内部序列集是ANSYS自动形成的,可通过*VECT的MAPBACK得到节点排列顺序,从而得到内部序列自由度序号对应的“节点.自由度”。BCS序列集也是ANSYS自动形成的,可以通过HBMAT命令得到.MAPPING文件,从这个文件中可以获得BCS序列自由度序号与“节点.自由度”对应关系。该关系如图3所示。
(3)从.FULL文件导入(*DMAT或*SMAT)的矩阵或荷载向量均为BCS序列,当与这些矩阵运算时,内部序列矩阵要映射到BCS序列。*LSBAC求解时的矩阵也为BCS序列。但从.MODE提取的模态矩阵和从.RST文件提取的自由度解向量是内部序列,这些内部序列矩阵与BCS序列矩阵运算时要进行转换。至于其他导入矩阵是基于何种序列,可以用*STAT命令查看这些矩阵的行列数据识别。
(4)各序列之间的转换主要使用映射矩阵。BCS序列与内部序列相互转换映射向量是用关键词“NOD2BCS”提取的,BCS序列与用户序列相互转换映射向量是用关键词”USR2BCS”提取的。
通常MAPDL都是BCS序列和内部序列,只有将自由度集转换为与PRNSOL显示的相同时,才转换为用户自由度集,且也很容易对应“节点.自由度”。
(5)*DMAT或*SMAT导入矩阵的维数和大小是自动的,但可用*STAT查看其大小。
(6)箱内矩阵无法直接查看,但可*EXPORT为数组或*PRINT到文件查询,也有可用不可查的,如USR2BCS向量,*PRINT无法输出到文件(原因未知)。
实际上,不必关心各序列或各序列集与“节点.自由度”的对应关系,只要知道运算时是否需要转换,以及怎样转换即可。其次,对于大型结构分析而言,采用*SMAT导入稀疏矩阵较*DMAT更节省内存。
声明:原创文章,欢迎留言与我讨论,如需转载留言