齐次线性方程

齐次线性方程的形式为

$\displaystyle a_1 u_{i_1} + a_2 u_{i_2} + \ldots + a_n u_{i_n}=0.$ (912)

变量 $ n$ 可以是任意整数,即线性方程可以包含任意多项。为了存储这些方程(也称为MPC),使用一维场ipompc和包含三列的二维场nodempc。对于MPC i,场ipompc的第i行包含场nodempc中MPC i定义开始的行:如果 $ ipompc(i)=j$ 则MPC第一项的自由度对应于节点中的方向 $ nodempc(j,2)$ 中的 $ nodempc(j,1)$。该项的系数存储在 $ coefmpc(j)$ 中。 的值 $ nodempc(j,3)$ 是场nodempc中包含MPC下一项信息的行。这一直持续到 $ nodempc(k,3)=0$,这意味着场nodempc第k行中的项是MPC i的最后一项。

例如,考虑以下MPC:

$\displaystyle 5. u_1(10) + 3. u_1(147) + 4.5 u_3(58)=0.$ (913)

其中 $ u_1(10)$ 表示节点编号10的全局x方向的位移,其他项类似。假设此MPC是方程编号 $ i$。那么该方程的存储方式可能如图168所示。

图168: 线性方程存储示例
\begin{figure}\epsfig{file=MPCconstraint.eps,width=10cm}\end{figure}

MPC中的第一项是特殊的,因为它被视为从属项。在有限元计算中,相应于这种从属项的自由度被表示为其他项的函数,并从方程组中移除。因此,不能对从属项的自由度施加其他约束。MPC从属项的自由度以与SPC类似的方式进行编目。为此,使用一维场ikmpc按数值顺序包含从属自由度,以及包含相应MPC编号的一维场ilmpc。这些场的含义与ikboun和ilboun完全类似,详细信息请参阅上一节。

此外,MPC被标记。MPC i的标签存储在 $ labmpc(i)$ 中。这是一个由20个字符组成的单词组成的一维场(FORTRAN中:character*20)。该标签用于表征MPC的类型。目前使用以下类型:

MEANROT、PLANE和STRAIGHT MPC由*MPC关键词卡触发,RIGID MPC由*RIGID BODY关键词卡触发,CYCLIC MPC由*CYCLIC SYMMETRY MODEL卡触发。SUBCYCLIC MPC不是由用户显式触发的,而是由程序内部确定的。

请注意,非齐次MPC可以通过引入新的自由度(引入新的虚拟节点)并通过SPC将非齐次项分配给它来简化为齐次MPC。非线性MPC可以通过线性化转化为线性MPC [24]。在CalculiX中,这目前针对PLANE MPC、STRAIGHT MPC、USER MPC和RIGID BODY定义完成。请注意,局部坐标中的SPC简化为线性MPC。

最后,还有变量icascade。它用于检查MPC自上次迭代以来是否发生了变化。这可能发生在非线性MPC(例如系数有时为零有时不为零)或接触条件下。尚未涵盖这一点。迄今为止,icascade假定取值为零,即MPC预计不会在迭代之间变化。(待续)