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

Method getStiffnessMatrix

tools/Assembler/ref/Assembler3D.cpp:168–218  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

166}
167
168ZSparseMatrix Assembler3D::getStiffnessMatrix() {
169 // Elastic modulii
170 Eigen::MatrixXd& D = m_D;
171 Eigen::MatrixXd& C = m_C;
172
173 typedef Eigen::Triplet<double> T;
174 std::vector<T> triplets;
175
176 for (size_t i=0; i<m_mesh->getNbrElements(); ++i)
177 {
178 VectorI idx = m_mesh->getElement(i);
179 assert(idx.size() == 4);
180
181 Eigen::MatrixXd &dN = m_DN[i];
182
183 // Small strain-displacement matrix
184 //
185 Eigen::MatrixXd B(6,12);
186 B << dN(0,0),0.0,0.0,dN(1,0),0.0,0.0,dN(2,0),0.0,0.0,dN(3,0),0.0,0.0,
187 0.0,dN(0,1),0.0,0.0,dN(1,1),0.0,0.0,dN(2,1),0.0,0.0,dN(3,1),0.0,
188 0.0,0.0,dN(0,2),0.0,0.0,dN(1,2),0.0,0.0,dN(2,2),0.0,0.0,dN(3,2),
189
190 0.5*dN(0,1),0.5*dN(0,0),0.0,
191 0.5*dN(1,1),0.5*dN(1,0),0.0,
192 0.5*dN(2,1),0.5*dN(2,0),0.0,
193 0.5*dN(3,1),0.5*dN(3,0),0.0,
194
195 0.5*dN(0,2),0.0,0.5*dN(0,0),
196 0.5*dN(1,2),0.0,0.5*dN(1,0),
197 0.5*dN(2,2),0.0,0.5*dN(2,0),
198 0.5*dN(3,2),0.0,0.5*dN(3,0),
199
200 0.0,0.5*dN(0,2),0.5*dN(0,1),
201 0.0,0.5*dN(1,2),0.5*dN(1,1),
202 0.0,0.5*dN(2,2),0.5*dN(2,1),
203 0.0,0.5*dN(3,2),0.5*dN(3,1);
204
205
206 Eigen::MatrixXd k_el = B.transpose() * D * C * B * m_mesh->getElementVolume(i);
207
208 for (size_t j=0; j<4; ++j)
209 for (size_t k=0; k<4; ++k)
210 for (size_t l=0; l<3; ++l)
211 for (size_t m=0; m<3; ++m)
212 triplets.push_back(T(3*idx[j]+l, 3*idx[k]+m, k_el(3*j+l, 3*k+m)));
213 }
214
215 Eigen::SparseMatrix<double> K = Eigen::SparseMatrix<double>(3*m_mesh->getNbrNodes(),3*m_mesh->getNbrNodes());
216 K.setFromTriplets(triplets.begin(), triplets.end());
217 return ZSparseMatrix(K);
218}
219
220ZSparseMatrix Assembler3D::getLaplacianMatrix() {
221 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