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

Method assemble

tools/Assembler/Assemblers/MassAssembler.cpp:13–47  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

11using namespace PyMesh;
12
13ZSparseMatrix MassAssembler::assemble(FESettingPtr setting) {
14 typedef FESetting::FEMeshPtr FEMeshPtr;
15 typedef FESetting::FEBasisPtr FEBasisPtr;
16 typedef FESetting::MaterialPtr MaterialPtr;
17
18 typedef Eigen::Triplet<Float> T;
19 std::vector<T> entries;
20
21 FEMeshPtr mesh = setting->get_mesh();
22 FEBasisPtr basis = setting->get_basis();
23 MaterialPtr material = setting->get_material();
24
25 const size_t dim = mesh->getDim();
26 const size_t num_nodes = mesh->getNbrNodes();
27 const size_t num_elements = mesh->getNbrElements();
28 const size_t nodes_per_element = mesh->getNodePerElement();
29
30 for (size_t i=0; i<num_elements; i++) {
31 const VectorI elem = mesh->getElement(i);
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 for (size_t k=0; k<nodes_per_element; k++) {
37 Float val = basis->integrate_func_func(i, j, k);
38 entries.push_back(T(elem[j], elem[k], val * density));
39 }
40 }
41 }
42
43 ZSparseMatrix M(num_nodes, num_nodes);
44 M.setFromTriplets(entries.begin(), entries.end());
45
46 return M;
47}

Callers

nothing calls this directly

Calls 13

get_basisMethod · 0.80
get_materialMethod · 0.80
integrate_func_funcMethod · 0.80
get_meshMethod · 0.45
getDimMethod · 0.45
getNbrNodesMethod · 0.45
getNbrElementsMethod · 0.45
getNodePerElementMethod · 0.45
getElementMethod · 0.45
getElementCenterMethod · 0.45
get_densityMethod · 0.45
beginMethod · 0.45

Tested by

no test coverage detected