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

Method getStiffnessMatrix

tools/Assembler/ref/Assembler2D.cpp:116–154  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

114}
115
116ZSparseMatrix Assembler2D::getStiffnessMatrix() {
117 // Elastic modulii
118 //
119 Eigen::MatrixXd& D = m_D;
120 Eigen::MatrixXd& C = m_C;
121
122 typedef Eigen::Triplet<double> T;
123 std::vector<T> triplets;
124
125 for (size_t i=0; i<m_mesh->getNbrElements(); ++i)
126 {
127 VectorI idx = m_mesh->getElement(i);
128 assert(idx.size() == 3);
129
130 Eigen::MatrixXd& dN = m_DN[i];
131
132 // Small strain-displacement matrix
133 //
134 Eigen::MatrixXd B(3,6);
135 B << dN(0,0), 0.0,dN(1,0), 0.0,dN(2,0), 0.0,
136 0.0 ,dN(0,1), 0.0,dN(1,1), 0.0,dN(2,1),
137 0.5*dN(0,1),0.5*dN(0,0),
138 0.5*dN(1,1),0.5*dN(1,0),
139 0.5*dN(2,1),0.5*dN(2,0);
140
141 Eigen::MatrixXd k_el = B.transpose() * D * C * B * m_mesh->getElementVolume(i);
142
143 for (size_t j=0; j<3; ++j)
144 for (size_t k=0; k<3; ++k)
145 for (size_t l=0; l<2; ++l)
146 for (size_t m=0; m<2; ++m)
147 triplets.push_back(T(2*idx[j]+l, 2*idx[k]+m, k_el(2*j+l, 2*k+m)));
148 }
149
150 Eigen::SparseMatrix<double> K = Eigen::SparseMatrix<double>(2*m_mesh->getNbrNodes(), 2*m_mesh->getNbrNodes());
151 K.setFromTriplets(triplets.begin(), triplets.end());
152 ZSparseMatrix tmp = ZSparseMatrix(K);
153 return tmp;
154}
155
156ZSparseMatrix Assembler2D::getLaplacianMatrix() {
157 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