首页 > 解决方案 > 特征化合物加法给出错误的结果

问题描述

我在程序中声明了两个 Eigen::RowVectorXd 变量,如下所示。我在复合加法语句中得到错误的结果sdf_grad+=gradval。仅添加前两个元素,sdf_grad向量中的其余元素变为 1e19。我不知道为什么会这样。请帮忙。

Eigen::RowVectorXd sdf_grad(24);
Eigen::VectorXd stress_dof = get_stress_dof();
Eigen::VectorXd strain_dof = get_strain_dof();


for(unsigned int i=0;i!=qn.size(); i++)
{
    for(unsigned int j=0; j!=qn.size();j++)
    {
        double sval = qn[i];
        double tval = qn[j];
        if(!m_shape->m_set_coordinate)
               m_shape->add_coordinates(this->get_xcoords(),this->get_ycoords());
        m_shape->update_shapefn(sval,tval);
        Eigen::MatrixXd Bs = get_bsmat_local(i,j);
        Eigen::Vector3d stress = Bs*stress_dof;
        Eigen::MatrixXd Bd = get_bmat(sval,tval);
        Eigen::Vector3d strain = Bd* strain_dof;


        Eigen::Vector3d cnfn = m_material->get_constitutive_function(stress,strain);
        auto WxJ  = qw[i] * qw[j] * m_shape->get_detJ();
        double delval=cnfn.norm();
        objval+=delval*WxJ;

        //SETTING GRADIENT OF STRESS DOF

        Eigen::MatrixXd CxBs = m_material->get_cmat()*Bs;
        Eigen::MatrixXd Bstrans = CxBs.transpose();
        Eigen::RowVectorXd gradval= (-WxJ/delval)*Bstrans*cnfn;
        sdf_grad+= gradval ; // Wrong Result.

    }
}

标签: c++eigen3

解决方案


您没有对向量进行零初始化。写这个而不是第一行:

Eigen::RowVectorXd sdf_grad = Eigen::RowVectorXd::Zero(24);

推荐阅读