2

私はC++コードを作成し、gcc4.7.1でコンパイルしています。MatrixEpetra式テンプレートを使用して、型がまたはVectorEpetraからの行列とベクトルをアセンブルするコードを記述していますTrilinos

私の問題は次のとおりです。コードは、定義した式を使用して(有限要素問題の場合)ベクトルをアセンブルし、指定したベクトル内に値を配置する必要があります。ベクトルは、を使用して組み立て方法に与えられboost::shared_ptrます。デバッグモードでコンパイルするとコードは完全に正常に機能しますが、optモードを使用してコンパイルするとベクトルはまったく入力されません。何が問題なのですか?

コードを投稿していないことは理解していますが、ここで使用する詳細レベルがわからないためです...投稿する行が多く、不適切である可能性があります。

4

2 に答える 2

2

これ以上コードを実行する必要はありませんが、私の精神的なデバッグ スキルから、ベクトルのサイズを大きくする必要はなく、予約済みメモリにアイテムを追加するために使用されresizeていることが分かります。push_backoperator[]

于 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 ポインターであり、4 行目は、評価して統合する必要がある式です。関数 integrate の最初のパラメーター (IntegrateVectorVolumeID と呼ばれるクラスのコンストラクター) は、式を統合する必要がある場所を説明します。その integrationOverSelectedVolumes() を別のタイプの統合ポリシー (私は機能しません) に置き換えましたが、同じ動作が得られるため、問題が発生しないことに注意してください。M_stiff は、私が話していたポインターです。クラスのセットアップメソッドで、ポイントするタイプのオブジェクトへのすべてのポインターをリセットしたため、初期化を忘れたとは思いません (おそらく間違っています)。私が...した途端'

ありがとう、ポル

于 2013-01-14T18:16:25.503 に答える