您如何使用本征求解具有Neumann型边界条件的方程组?

问题描述

我正在尝试为结构问题编写一个小型FEM解算器。我正在用C ++编写它,并使用Eigen进行矩阵运算。我正在尝试解决问题Ka = f,其中K是一个稀疏的n×n矩阵,而f是一个稀疏的1×n向量。我想在解决方案a上应用Neumann型边界条件。

如何使用Eigen实现此目标?还是我在想这个问题完全错了?

我无法产生想要实现的MWE,但这是基本的MWE:

#include <iostream>
#include <Eigen/Sparse>
int main(int argc,char const *argv[])
{
    // K is supposed to be positive definite
    Eigen::SparseMatrix<float> K;
    Eigen::SparseMatrix<float> f;
    Eigen::SparseMatrix<float> a;
    K.resize(6,6);
    f.resize(6,1);
    // fill them with some arbitrary numbers...
    K.coeffRef(0,0)=127700;K.coeffRef(0,1)=127700;K.coeffRef(0,2)=127700;K.coeffRef(0,3)=127700;K.coeffRef(0,4)=127700;K.coeffRef(0,5)=127700;
    K.coeffRef(1,0)=127700;K.coeffRef(1,1)=39179.1;K.coeffRef(1,2)=-107963;K.coeffRef(1,3)=-294.578;K.coeffRef(1,4)=-19736.8;K.coeffRef(1,5)=-38884.5;
    K.coeffRef(2,0)=127700;K.coeffRef(2,1)=-107963;K.coeffRef(2,2)=-19736.8;K.coeffRef(2,3)=39179.1;K.coeffRef(2,4)=294.578;K.coeffRef(2,5)=-39473.7;
    K.coeffRef(3,0)=127700;K.coeffRef(3,1)=-294.578;K.coeffRef(3,2)=39179.1;K.coeffRef(3,3)=-10015.7;K.coeffRef(3,4)=-107963;K.coeffRef(3,5)=-39179.1;
    K.coeffRef(4,0)=127700;K.coeffRef(4,1)=-19736.8;K.coeffRef(4,2)=294.578;K.coeffRef(4,3)=-107963;K.coeffRef(4,4)=-19736.8;K.coeffRef(4,5)=-39179.1;
    K.coeffRef(5,0)=127700;K.coeffRef(5,1)=-38884.5;K.coeffRef(5,2)=-39473.7;K.coeffRef(5,3)=-39179.1;K.coeffRef(5,4)=-39179.1;K.coeffRef(5,5)=-39473.7;
    f.coeffRef(5,0)=1.0f;
    Eigen::SimplicialLDLT<Eigen::SparseMatrix<float>> solver;
    solver.compute(K);
    // How to apply boundary conditions on specific values on a?
    a = solver.solve(f);
    return 0;
}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)