处理灵敏度

灵敏度是在 results_se.c、mafillsmmain_se.c 和 objectivemain_se.c 程序中计算的。

在 results_se.c 程序中,确定了 $ \frac{\partial F_{\text{int}}}{\partial s}$。对于几何非线性计算(*STEP 卡上的参数 NLGEOM),导致内力的未扰动位移对应于前一静力步骤结束时的位移(如果有),并加上当前的指定位移。对于线性几何计算,未扰动的位移对应于零加上当前的指定位移。实际上,非零的指定位移在线性计算中会导致内力。因此,方程(809)中的项 $ \frac{\partial
F}{\partial s}$ 可以在线性计算中替换为 $ \frac{\partial F_{\text{ext}}}{\partial s}-\frac{\partial F_{\text{int}}}{\partial
s}$,注意到只有非零的初始位移边界条件才会导致内力(而不是任何之前的位移)。results_se.c 必须在线性计算中调用的第二个原因是,每个积分点的材料切向 $ \frac{\partial
S}{\partial E}$,这是在 mafillsmmain_se.c 中建立刚度矩阵所需要的,也在 results_se.c 中确定。

mafillsmmain_se.c 程序计算外力的导数和刚度矩阵(以及类似矩阵)的导数:

出于计算效率的考虑,后面的项在单元级别计算,然后组装成全局矩阵。

最后一个主要程序 objectivemain_se.c 组装前面的信息以获得最终灵敏度。对于取向作为设计变量,这些灵敏度立即存储在 .dat 或 .frd 文件中。然而,对于几何(外部表面上节点的法向方向)作为设计变量的灵敏度,被保留用于在 sens_coor.c 中进行进一步后处理。

对于目标函数 $ G$,总灵敏度 $ \frac{d G(s,U(s))}{d s}$ 被写为 $ \frac{\partial
HR|G}{\partial s} + \frac{\partial G}{\partial U} \cdot \frac{\partial
VT|U}{\partial s}$。因此,目标函数被用于项 $ \frac{\partial G}{\partial s}$ $ \frac{\partial G}{\partial U}$。objectivemain_se.c 程序根据目标函数分为几部分: