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

Method assemble

tools/Assembler/Assemblers/LaplacianAssembler.cpp:16–48  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

14using namespace PyMesh;
15
16ZSparseMatrix LaplacianAssembler::assemble(FESettingPtr setting) {
17 typedef FESetting::FEMeshPtr FEMeshPtr;
18 typedef FESetting::FEBasisPtr FEBasisPtr;
19 typedef FESetting::MaterialPtr MaterialPtr;
20
21 typedef Eigen::Triplet<Float> T;
22 std::vector<T> entries;
23
24 FEMeshPtr mesh = setting->get_mesh();
25 FEBasisPtr basis = setting->get_basis();
26 MaterialPtr material = setting->get_material();
27
28 const size_t num_nodes = mesh->getNbrNodes();
29 const size_t num_elements = mesh->getNbrElements();
30 const size_t nodes_per_element = mesh->getNodePerElement();
31
32 for (size_t i=0; i<num_elements; i++) {
33 const VectorI elem = mesh->getElement(i);
34 VectorF coord = mesh->getElementCenter(i);
35 Float density = material->get_density(coord);
36
37 for (size_t j=0; j<nodes_per_element; j++) {
38 for (size_t k=0; k<nodes_per_element; k++) {
39 Float grad_prod = basis->integrate_grad_grad(i, j, k);
40 entries.push_back(T(elem[j], elem[k], grad_prod * density));
41 }
42 }
43 }
44
45 ZSparseMatrix L(num_nodes, num_nodes);
46 L.setFromTriplets(entries.begin(), entries.end());
47 return L;
48}

Callers

nothing calls this directly

Calls 12

get_basisMethod · 0.80
get_materialMethod · 0.80
integrate_grad_gradMethod · 0.80
get_meshMethod · 0.45
getNbrNodesMethod · 0.45
getNbrElementsMethod · 0.45
getNodePerElementMethod · 0.45
getElementMethod · 0.45
getElementCenterMethod · 0.45
get_densityMethod · 0.45
beginMethod · 0.45
endMethod · 0.45

Tested by

no test coverage detected