2

我正在编写 C++ 代码并使用 gcc 4.7.1 对其进行编译。我正在使用表达式模板编写代码来组装矩阵和向量,其类型为MatrixEpetraVectorEpetra来自Trilinos.

我的问题如下:代码应该使用我定义的表达式组装一个向量(对于有限元问题),并将值放在我给他的向量中。向量被赋予使用 a 的组装方法boost::shared_ptr。当我在调试模式下编译代码时,代码工作得很好,但是当我使用 opt 模式编译时,向量根本没有填充。可能是什么问题呢?

我知道我没有发布代码片段,但这只是因为我不知道我应该在这里使用哪个级别的详细信息......我的意思是我要发布的行很多而且可能不合适。

4

2 回答 2

2

没有更多代码可以继续,我的心理调试技能告诉我,你没有resizepush_back增加向量的大小,而只是用于operator[]将项目添加到保留的内存中。

于 2013-01-14T14:23:04.327 回答
0

代码如下:

      integrate( integrationOverSelectedVolumes( this->M_FESpace->mesh(), this->M_markerFunctorPtr ) ,
                 this->M_FESpace->qr(),
                 this->M_ETFESpace,
                 value(bulk / 2.0) * ( pow( J ,2.0) - J + log(J)) * dot(  F_T, grad(phi_i) )
                ) >> M_stiff;

其中 M_stiff 是指向 VectorEpetra 的 boost::shared 指针,第四行是我需要评估和整合的表达式。函数集成的第一个参数(它是一个名为 IntegrateVectorVolumeID 的类的构造函数)解释了必须在哪里集成表达式。请注意,我已将 integrationOverSelectedVolumes() 替换为另一种类型的集成策略(我无法使用),并且我得到了相同的行为,因此问题不存在购买那个。M_stiff 是我所说的指针。我不认为(但我可能错了)我忘记了初始化,因为在类的 setup 方法中,我重置了指向类型对象的所有指针。只要我'

谢谢,波尔

于 2013-01-14T18:16:25.503 回答