具有弱形式的 FEM 库

计算科学 有限元 C++ 图书馆
2021-11-30 22:22:35

我需要实现一个结构分析代码,我向你寻求建议。我的需求很简单:

  1. 库必须可集成到 C++ 代码中
  2. 我要表达弱形式,无需人工干预

第二点使图书馆deal.II超出了我的范围。我试过FEniCS了,但是让它与 Xcode 一起工作是一场噩梦,我不断地发现控制台和 Xcode 之间的差异,我需要调试我的代码!

有什么选择吗?

谢谢!

2个回答

您可能无法将 deal.II 中的弱形式表达为数学公式,但您已经非常接近了。对于弹性,双线性形式为 对应的代码如下:

a(φi,φj)=(λφi,φj)Ω+(μφi,φj)Ω,+(μφi,φjT)Ω,

  for (unsigned int q_point=0; q_point<n_q_points; ++q_point)
    for (unsigned int i=0; i<dofs_per_cell; ++i)
      {
        const Tensor<2,dim> phi_i_grad
          = fe_values[displacements].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 Tensor<2,dim> phi_j_grad
              = fe_values[displacements].gradient (j,q_point);
            const double phi_j_div
              = fe_values[displacements].divergence (j,q_point);

            cell_matrix(i,j)
              +=  (lambda_values[q_point] *
                   phi_i_div * phi_j_div
                   +
                   mu_values[q_point] *
                   double_contract(phi_i_grad, phi_j_grad)
                   +
                   mu_values[q_point] *
                   double_contract(phi_i_grad, transpose(phi_j_grad))
                  ) *
                  fe_values.JxW(q_point);
          }

组装细胞矩阵的最后几行实际上是上述公式的 1:1 转录。

更多细节在这里:https ://dealii.org/developer/doxygen/deal.II/group__vector__valued.html

我自己在计算科学方面没有太多经验。还是相对论新。但是,根据我的经验,我会尽力回答。

我必须同意这里的其他用户。尝试获得 FENics 支持以帮助解决您的 XCODE 问题。

如果这不起作用,Deal.ii 还不错。它负责编写所有程序的大部分艰苦工作。由于它广泛使用教程和文档,我还不会完全忽略它。当然,启动和运行需要一些努力,但相对而言,我认为它是那里最好的工具之一。

至于通过正交转换为弱计算和估计,这可能需要一些研究。