确定矩阵结构。

这个重要任务在mastruct.c中执行(对于不具有循环对称性的结构)和mastructcs.c中执行(对于循环对称结构)。让我们关注mastruct.c。

活动自由度存储在二维场nactdof中。它有与模型中节点数相同的行数和四列,因为每个节点有一个温度自由度和三个平动自由度。因为一维和二维单元在"gen3delem.f"例程中展开为三维单元,所以不需要转动自由度。在C中,这个场被映射为一维场,从节点1的自由度开始,然后是节点2的自由度,以此类推。首先,nactdof中的所有条目都被停用(设置为零)。然后根据以下算法(停)用它们:

然后,活动自由度被编号(正数)。随后,基于单元的拓扑结构和多点约束来确定矩阵的结构。

对于SPOOLES、ARPACK和迭代方法,存储方案仅限于矩阵的非零SUBdiagonal位置。方案之所以如此是出于历史原因,我认为没有理由不使用其他方案,例如SUPERdiagonal存储。存储描述如下:

这三个场都是一维的,irow的大小对应于矩阵中非零SUBdiagonal条目的数量,icol和jq的大小对应于活动自由度的数量。矩阵的对角条目单独存储,因此不需要这些项目的存储信息。

如果有热条目,它们存储在力学条目之后。力学条目的数量是neq[C表示法],条目总数(力学和热)是neq[1]。同样,非零力学SUBdiagonal条目的数量是nzs[0],SUBdiagonal条目的总数是nzs[1]。在热力学应用中,力学和热学子矩阵被认为是不同的,即刚度矩阵中力学和热自由度之间没有连接。因此,力学和热自由度在存储场irow中占据两个不同的区域。

文件mastructcs计算循环对称结构的存储。这些结构的自由度数量加倍,因为循环对称导致一个复系统被简化为两倍大小的实系统。循环对称方程是具有复系数的线性方程,需要单独处理。然而,存储所使用的场是相同的。