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

Method assemble

tools/Assembler/Assemblers/GradientAssembler.cpp:14–44  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

12using namespace PyMesh;
13
14ZSparseMatrix GradientAssembler::assemble(FESettingPtr setting) {
15 auto mesh = setting->get_mesh();
16 auto basis = setting->get_basis();
17
18 typedef Eigen::Triplet<Float> T;
19 std::vector<T> entries;
20
21 const size_t dim = mesh->getDim();
22 const size_t num_nodes = mesh->getNbrNodes();
23 const size_t num_elements = mesh->getNbrElements();
24 const size_t nodes_per_element = mesh->getNodePerElement();
25 const VectorF coord = VectorF::Ones(nodes_per_element) / nodes_per_element;
26 entries.reserve(num_elements * nodes_per_element * dim);
27 for (size_t i=0; i<num_elements; i++) {
28 VectorI elem = mesh->getElement(i);
29 MatrixFr grads(nodes_per_element, dim);
30 for (size_t j=0; j<nodes_per_element; j++) {
31 grads.row(j) = basis->evaluate_grad(i, j, coord);
32 }
33
34 for (size_t j=0; j<nodes_per_element; j++) {
35 for (size_t k=0; k<dim; k++) {
36 entries.push_back(T(i*dim+k, elem[j], grads(j, k)));
37 }
38 }
39 }
40
41 ZSparseMatrix G(num_elements * dim, num_nodes);
42 G.setFromTriplets(entries.begin(), entries.end());
43 return G;
44}

Callers

nothing calls this directly

Calls 10

get_basisMethod · 0.80
get_meshMethod · 0.45
getDimMethod · 0.45
getNbrNodesMethod · 0.45
getNbrElementsMethod · 0.45
getNodePerElementMethod · 0.45
getElementMethod · 0.45
evaluate_gradMethod · 0.45
beginMethod · 0.45
endMethod · 0.45

Tested by

no test coverage detected