MCPcopy Create free account
hub / github.com/PyMesh/PyMesh / getLaplacianMatrix

Method getLaplacianMatrix

tools/Assembler/ref/Assembler3D.cpp:220–248  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

218}
219
220ZSparseMatrix Assembler3D::getLaplacianMatrix() {
221 typedef Eigen::Triplet<double> T;
222 std::vector<T> triplets;
223
224 for (size_t i=0; i<m_mesh->getNbrElements(); ++i)
225 {
226 VectorI idx = m_mesh->getElement(i);
227 assert(idx.size() == 4);
228
229 Eigen::MatrixXd &dN = m_DN[i];
230
231 // Small strain-displacement matrix
232 // B = grad u for approximation.
233 Eigen::MatrixXd B(3,4);
234 B << dN(0,0),dN(1,0), dN(2,0),dN(3,0),
235 dN(0,1),dN(1,1), dN(2,1),dN(3,1),
236 dN(0,2),dN(1,2), dN(2,2),dN(3,2);
237
238 Eigen::MatrixXd k_el = B.transpose() * B * m_mesh->getElementVolume(i);
239
240 for (size_t j=0; j<4; ++j)
241 for (size_t k=0; k<4; ++k)
242 triplets.push_back(T(idx[j],idx[k], k_el(j,k)));
243 }
244
245 Eigen::SparseMatrix<double> L = Eigen::SparseMatrix<double>(m_mesh->getNbrNodes(),m_mesh->getNbrNodes());
246 L.setFromTriplets(triplets.begin(), triplets.end());
247 return ZSparseMatrix(L);
248}
249
250ZSparseMatrix Assembler3D::getDisplacementStrainMatrix() {
251 typedef Eigen::Triplet<double> T;

Callers

nothing calls this directly

Calls 8

ZSparseMatrixClass · 0.50
getNbrElementsMethod · 0.45
getElementMethod · 0.45
sizeMethod · 0.45
getElementVolumeMethod · 0.45
getNbrNodesMethod · 0.45
beginMethod · 0.45
endMethod · 0.45

Tested by

no test coverage detected