Registered Member
|
Deal all,
Thank you for your time to read my question. Eigen is really awesome, I'm using Eigen to write some FEM code. I read the Eigen3.3.4 document, and in this website(http://eigen.tuxfamily.org/dox-devel/To ... Types.html), it says we should use Ref<MatrixBase> to avoid the additioinal copy and obtain high performance. So in my FEM code, for the sparse matrix assemble part, let's say the function is: FormFE(const Ref<VectorXd> &U,const Ref<VectorXd> &V,Ref<SparseMatrix<double> > AMATRIX,Ref<VectorXd> RHS) where U represent the displacement, V represent the velocity term. AMATRIX is my sparse matrix, RHS is the residual term. Then I try to first initializing my AMATRIX before assemble(I have a tripletList which contains all the non-zero element and its value(I set the value to zero for initializing)) So I tried: AMATRIX.setFromTriplets(ZeroTripList.begin(),ZeroTripList.end()); But I have an error: class Eigen::Ref<Eigen::SparseMatrix<double, 0, int> >’ has no member named ‘setFromTriplets So how could I solve this problem? One of my solution is using FormFE(const Ref<VectorXd> &U,const Ref<VectorXd> &V,SparseMatrix<double> &AMATRIX,Ref<VectorXd> RHS) this is working very fine, but I'm not sure it is efficient or not. I'm not very good at cpp Actually, I have three questions: 1. How to efficiently use Eigen(especially for FEM calculation), I use Eigen's VectorXd and MatrixXd almost everywhere in each of my FEM-related function. 2. How to efficiently assemble a SparseMatrix? 3. Is it possible to do some OpenMP parallelization for the FEM assemble? Thank you. Best regards. |
Moderator
|
For the record, answered there: https://stackoverflow.com/questions/470 ... rse-matrix
|
Registered users: Bing [Bot], daret, Google [Bot], sandyvee, Sogou [Bot]