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
Exemple #2
0
  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
Exemple #3
0
  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
Exemple #4
0
    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
Exemple #5
0
    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
Exemple #6
0
  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