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

Method assemble

tools/Assembler/Assemblers/LumpedMassAssembler.cpp:13–44  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

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

Callers

nothing calls this directly

Calls 12

get_materialMethod · 0.80
get_meshMethod · 0.45
getDimMethod · 0.45
getNbrNodesMethod · 0.45
getNbrElementsMethod · 0.45
getNodePerElementMethod · 0.45
getElementMethod · 0.45
getElementVolumeMethod · 0.45
getElementCenterMethod · 0.45
get_densityMethod · 0.45
beginMethod · 0.45
endMethod · 0.45

Tested by

no test coverage detected