11月20日

11月20日

ImplicitBackwardEulerSparse::DoTimestep的

总步骤:

1 通过当前的位移,计算出内力和刚度矩阵

2 用刚度矩阵和质量矩阵构造阻尼矩阵

3 用求解器解出qdelta,就是下一步的速度增量(为什么?求解器的矩阵在哪里更新?

    求解器实际上求解 tangentStiffnessMatrix * qdelta = bufferConstrained

    于是关键在于知道 tangentStiffnessMatrix是什么

4  qvel[i] += qdelta[i],q[i] += q_1[i] - q[i] + timestep * qvel[i];

5 重新把约束了的变量的q qvel qacc(分别代表广义坐标、速度、加速度)设为0


当前问题:

什么是tangent stiffness matrix?各种矩阵的构造方法是什么?

隐式欧拉积分器的具体做法是什么?

内力的计算方法是什么?


计算出内力和刚度矩阵调用层次结构

ImplicitBackwardEulerSparse::DoTimestep

      CorotationalLinearFEMForceModel::GetForceAndMatrix

      (double * u, double * internalForces, SparseMatrix * tangentStiffnessMatrix)

             CorotationalLinearFEM::ComputeForceAndStiffnessMatrix

             (double * u, double * f, SparseMatrix * stiffnessMatrix, int warp)



为什么刚度矩阵需要实时生成?


CorotationalLinearFEM::ComputeForceAndStiffnessMatrixOfSubmesh

试图根据偏移u求出变形梯度F,再求出内力

其中

发现计算四面体变形梯度F的方法


此函数中

fElement存放四个顶点的f







原文地址:https://www.cnblogs.com/dydx/p/4235966.html