def _calculateStiffnessMat(self): """ Calculate stiffness matrix. """ import feutils K = numpy.zeros( (self.spaceDim*self.numVertices, self.spaceDim*self.numVertices), dtype=numpy.float64) # Matrix of elasticity values D = self._calculateElasticityMat() for cell in self.cells: cellK = numpy.zeros( (self.spaceDim*self.numBasis, self.spaceDim*self.numBasis), dtype=numpy.float64) vertices = self.vertices[cell, :] (jacobian, jacobianInv, jacobianDet, basisDeriv) = \ feutils.calculateJacobian(self.quadrature, vertices) fieldTpdt = self.fieldT + self.fieldTIncr for iQuad in xrange(self.numQuadPts): wt = self.quadWts[iQuad] * jacobianDet[iQuad] BL0 = self._calculateBasisDerivMatLinear0(basisDeriv, iQuad) BL1 = self._calculateBasisDerivMatLinear1(basisDeriv, iQuad, fieldTpdt) BL = BL0 + BL1 cellK[:] += wt * numpy.dot(numpy.dot(BL.transpose(), D), BL) BNL = self._calculateBasisDerivMatNonlinear(basisDeriv, iQuad) strain = self._calculateStrain(basisDeriv, iQuad, fieldTpdt) S = self._calculateStress(strain, D) cellK[:] += wt * numpy.dot(numpy.dot(BNL.transpose(), S), BNL) feutils.assembleMat(K, cellK, cell, self.spaceDim) return K
def _calculateStiffnessMat(self): """ Calculate stiffness matrix. """ import feutils K = numpy.zeros( (self.spaceDim*self.numVertices, self.spaceDim*self.numVertices), dtype=numpy.float64) # Matrix of elasticity values D = self._calculateElasticityMat() for cell in self.cells: cellK = numpy.zeros( (self.spaceDim*self.numBasis, self.spaceDim*self.numBasis), dtype=numpy.float64) vertices = self.vertices[cell, :] (jacobian, jacobianInv, jacobianDet, basisDeriv) = \ feutils.calculateJacobian(self.quadrature, vertices) for iQuad in xrange(self.numQuadPts): wt = self.quadWts[iQuad] * jacobianDet[iQuad] B = self._calculateBasisDerivMat(basisDeriv, iQuad) cellK[:] += wt * numpy.dot(numpy.dot(B.transpose(), D), B) feutils.assembleMat(K, cellK, cell, self.spaceDim) return K
def _calculateStiffnessMat(self): """ Calculate stiffness matrix. """ import feutils K = numpy.zeros((self.spaceDim * self.numVertices, self.spaceDim * self.numVertices), dtype=numpy.float64) # Matrix of elasticity values D = self._calculateElasticityMat() for cell in self.cells: cellK = numpy.zeros( (self.spaceDim * self.numBasis, self.spaceDim * self.numBasis), dtype=numpy.float64) vertices = self.vertices[cell, :] (jacobian, jacobianInv, jacobianDet, basisDeriv) = \ feutils.calculateJacobian(self.quadrature, vertices) fieldTpdt = self.fieldT + self.fieldTIncr for iQuad in xrange(self.numQuadPts): wt = self.quadWts[iQuad] * jacobianDet[iQuad] BL0 = self._calculateBasisDerivMatLinear0(basisDeriv, iQuad) BL1 = self._calculateBasisDerivMatLinear1( basisDeriv, iQuad, fieldTpdt) BL = BL0 + BL1 cellK[:] += wt * numpy.dot(numpy.dot(BL.transpose(), D), BL) BNL = self._calculateBasisDerivMatNonlinear(basisDeriv, iQuad) strain = self._calculateStrain(basisDeriv, iQuad, fieldTpdt) S = self._calculateStress(strain, D) cellK[:] += wt * numpy.dot(numpy.dot(BNL.transpose(), S), BNL) feutils.assembleMat(K, cellK, cell, self.spaceDim) return K
def _calculateMassMat(self): """ Calculate mass matrix. """ M = numpy.zeros((self.spaceDim * self.numVertices, self.spaceDim * self.numVertices), dtype=numpy.float64) for cell in self.cells: cellM = numpy.zeros((self.spaceDim * self.numBasis, self.spaceDim * self.numBasis), dtype=numpy.float64) vertices = self.vertices[cell, :] (jacobian, jacobianInv, jacobianDet, basisDeriv) = feutils.calculateJacobian(self.quadrature, vertices) for iQuad in xrange(self.numQuadPts): wt = self.quadWts[iQuad] * jacobianDet[iQuad] N = self._calculateBasisMat(iQuad) cellM[:] += self.density * wt * numpy.dot(N.transpose(), N) feutils.assembleMat(M, cellM, cell, self.spaceDim) return M
def _calculateMassMat(self): """ Calculate mass matrix. """ M = numpy.zeros( (self.spaceDim*self.numVertices, self.spaceDim*self.numVertices), dtype=numpy.float64) for cell in self.cells: cellM = numpy.zeros( (self.spaceDim*self.numBasis, self.spaceDim*self.numBasis), dtype=numpy.float64) vertices = self.vertices[cell, :] (jacobian, jacobianInv, jacobianDet, basisDeriv) = \ feutils.calculateJacobian(self.quadrature, vertices) for iQuad in xrange(self.numQuadPts): wt = self.quadWts[iQuad] * jacobianDet[iQuad] N = self._calculateBasisMat(iQuad) cellM[:] += self.density * wt * numpy.dot(N.transpose(), N) feutils.assembleMat(M, cellM, cell, self.spaceDim) return M