すべてを扱う、 私の質問を読んでいただきありがとうございます。 私はEigen3.3.4(http://eigen.tuxfamily.org/index.php?title=Main_Page)を使っていくつかのFEMコードを書いています。FEMの疎なマトリックスを効率的に組み立てる方法
私はEigen3.3.4のドキュメントを読んでおり、このウェブサイト(http://eigen.tuxfamily.org/dox/TopicFunctionTakingEigenTypes.html)には と書かれていますが、追加コピーを避けて高性能を得るにはRef<MatrixBase>
を使用してください。疎行列のための私のFEMコードでそう
は、部品を組み立て、の関数であるとしましょう:
Uは変位を表すFormFE(const Ref<VectorXd> &U,const Ref<VectorXd> &V,
Ref<SparseMatrix<double> > AMATRIX,Ref<VectorXd> RHS)
、Vは速度項を表します。 AMATRIXは私の疎な行列、RHSは残差項です。
それから私は、だから私は試した(私は(私は)初期化するための値をゼロに設定し、すべての非ゼロ要素とその値が含まれているtripletListを持っている) 組み立て最初の前に私のマトリクス状を初期化しよう:
をAMATRIX.setFromTriplets(ZeroTripList.begin(),ZeroTripList.end());
しかし、私はエラーを持っている:
class Eigen::Ref<Eigen::SparseMatrix<double, 0, int> >’ has no member named ‘setFromTriplets
だから、どのように私はこの問題を解決するだろうか?
私の解決策の一つは、使用している:
FormFE(const Ref<VectorXd> &U,const Ref<VectorXd> &V,
SparseMatrix<double> &AMATRIX,Ref<VectorXd> RHS)
これは非常に正常に動作しているが、私はそれが効率的であるかどうかわかりません。 私はCPPで非常によくないよ:P実は
、私の質問は以下のとおりです。
- が効率的に(特にFEM計算のための)固有の使用方法、私はそれぞれにほとんどどこでも固有のVectorXdとMatrixXd使用します私のFEM関連の機能。
- SparseMatrixを効率的に組み立てるには?
- FEMアセンブル用にOpenMP並列化を行うことはできますか?
- C++ベースのFEMコーディング(ライブラリの推奨または有用なアイデア)の参考にしてください。
ありがとうございます。 よろしくお願いいたします。
これはアセンブリプログラミングとどのように関連していますか? – fuz
こんにちは、私の現在の要素のすべての係数は、tripletListに格納されているので、私はsetFromTriplistを介してアセンブリを行うことができます。 – walkandthinker
それはアセンブリプログラミングではありません。その言葉には特別な意味があります。 – fuz