#include "crouzeix_raviart_cotmatrix.h" #include "unique_simplices.h" #include "all_edges.h" #include "is_edge_manifold.h" #include "cotmatrix_entries.h" template void igl::crouzeix_raviart_cotmatrix( const Eigen::MatrixBase & V, const Eigen::MatrixBase & F, Eigen::SparseMatrix & L, Eigen::PlainObjectBase & E, Eigen::PlainObjectBase & EMAP) { // All occurances of directed edges Eigen::MatrixXi allE; all_edges(F,allE); Eigen::VectorXi _1; unique_simplices(allE,E,_1,EMAP); return crouzeix_raviart_cotmatrix(V,F,E,EMAP,L); } template void igl::crouzeix_raviart_cotmatrix( const Eigen::MatrixBase & V, const Eigen::MatrixBase & F, const Eigen::MatrixBase & E, const Eigen::MatrixBase & EMAP, Eigen::SparseMatrix & L) { assert(F.cols() == 3); // number of rows const int m = F.rows(); // Mesh should be edge-manifold assert(is_edge_manifold(F)); typedef Eigen::Matrix MatrixXS; MatrixXS C; cotmatrix_entries(V,F,C); Eigen::MatrixXi F2E(m,3); { int k =0; for(int c = 0;c<3;c++) { for(int f = 0;f > LIJV(12*m); Eigen::VectorXi LI(12),LJ(12),LV(12); LI<<0,1,2,1,2,0,0,1,2,1,2,0; LJ<<1,2,0,0,1,2,0,1,2,1,2,0; LV<<2,0,1,2,0,1,2,0,1,2,0,1; for(int f=0;f