微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决您如何使用本征求解具有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 举报,一经查实,本站将立刻删除。