我正在学习如何使用 deal.II 库解决向量值问题。特别是我从官网看下面的介绍https://www.dealii.org/current/doxygen/deal.II/group__vector__valued.html#VVALalternative
在这里,他们将双线性形式写为
然后他们说
但我不明白为什么指数加倍在最后的平等!我认为它不应该在那里,也是因为没有依赖.
编辑:
所以最后一个总和是
我现在想知道这个双数是如何在片段中准确翻译的
for (unsigned int q_point=0; q_point<n_q_points; ++q_point)
for (unsigned int i=0; i<dofs_per_cell; ++i)
{
const SymmetricTensor<2,dim> phi_i_symmgrad
= fe_values[displacements].symmetric_gradient (i,q_point);
const double phi_i_div
= fe_values[displacements].divergence (i,q_point);
for (unsigned int j=0; j<dofs_per_cell; ++j)
{
const SymmetricTensor<2,dim> phi_j_symmgrad
= fe_values[displacements].symmetric_gradient (j,q_point);
const double phi_j_div
= fe_values[displacements].divergence (j,q_point);
cell_matrix(i,j)
+= (phi_i_div * phi_j_div *
lambda_values[q_point]
+
2 *
(phi_i_symmgrad * phi_j_symmgrad) *
mu_values[q_point]) *
fe_values.JxW(q_point);
}
}
这是我的尝试:
应用正交公式:
现在我认识到术语正是
因此,我怀疑这phi_i_symmgrad * phi_j_symmgrad正是两个对称梯度之间的标量积,其中 * 运算符已被适当地重载,因为这两个项都是 2 阶张量。
那是正确的吗?