Esempio n. 1
0
    def Volume(self):
        (n1, n2, n3, n4, n5, n6) = self.nodePositions()
        A1 = Area(n3 - n1, n2 - n1)
        A2 = Area(n6 - n4, n5 - n4)
        c1 = (n1 + n2 + n3) / 3.
        c2 = (n4 + n5 + n6) / 3.

        V = (A1 + A2) / 2. * (c1 - c2)
        return abs(V)
Esempio n. 2
0
    def getFaceNodesAndArea(self, nid, nidOpposite):
        nids = self.nodeIDs()[:6]
        indx1 = nids.index(nid)
        indx2 = nids.index(nidOpposite)
        ##  offset so it's easier to map the nodes with the QRG
        pack = [indx1 + 1, indx2 + 1]
        pack.sort()
        mapper = {  # reverse points away from the element
                    [1, 2]: [1, 2, 3],  # close
                    [2, 3]: [1, 2, 3],
                    [1, 3]: [1, 2, 3],

                    [4, 5]: [4, 5, 6],  # far-reverse
                    [5, 6]: [4, 5, 6],
                    [4, 6]: [4, 5, 6],

                    [1, 5]: [1, 2, 5, 4],  # bottom
                    [2, 4]: [1, 2, 5, 4],

                    [1, 6]: [1, 3, 6, 4],  # left-reverse
                    [3, 4]: [1, 3, 6, 4],

                    [2, 6]: [2, 5, 6, 3],  # right
                    [3, 5]: [2, 3, 6, 5],
        }
        pack2 = mapper[pack]
        if len(pack2) == 3:
            (n1, n2, n3) = pack2
            faceNodeIDs = [n1, n2, n3]
            n1i = nids.index(n1 - 1)
            n2i = nids.index(n2 - 1)
            n3i = nids.index(n3 - 1)
            p1 = self.nodes[n1i].Position()
            p2 = self.nodes[n2i].Position()
            p3 = self.nodes[n3i].Position()
            a = p1 - p2
            b = p1 - p3
            A = Area(a, b)
        else:
            (n1, n2, n3, n4) = pack2
            n1i = nids.index(n1 - 1)
            n2i = nids.index(n2 - 1)
            n3i = nids.index(n3 - 1)
            n4i = nids.index(n4 - 1)
            faceNodeIDs = [n1, n2, n3, n4]
            p1 = self.nodes[n1i].Position()
            p2 = self.nodes[n2i].Position()
            p3 = self.nodes[n3i].Position()
            p4 = self.nodes[n4i].Position()
            a = p1 - p3
            b = p2 - p4
            A = Area(a, b)
        return [faceNodeIDs, A]
Esempio n. 3
0
    def areaCentroid(self, n1, n2, n3, n4):
        a = n1 - n2
        b = n2 - n4
        area1 = Area(a, b)
        c1 = (n1 + n2 + n4) / 3.

        a = n2 - n4
        b = n2 - n3
        area2 = Area(a, b)
        c2 = (n2 + n3 + n4) / 3.

        area = area1 + area2
        centroid = (c1 * area1 + c2 * area2) / area
        return(area, centroid)
Esempio n. 4
0
 def Area(self):
     r"""
     \f[ A = \frac{1}{2} \lvert (n_1-n_3) \times (n_2-n_4) \rvert \f]
     where a and b are the quad's cross node point vectors
     """
     (n1, n2, n3, n4) = self.nodePositions()
     a = n1 - n3
     b = n2 - n4
     area = Area(a, b)
     return area
Esempio n. 5
0
 def Area(self):
     r"""
     returns the normal vector
     \f[ \large A = \frac{1}{2} (n_0-n_1) times (n_0-n_2)  \f]
     """
     (n1, n2, n3, n4, n5, n6) = self.nodePositions()
     a = n1 - n3
     b = n1 - n5
     area = Area(a, b)
     return area
Esempio n. 6
0
 def Area(self):
     r"""
     returns the normal vector
     \f[ \large A = \frac{1}{2} (n_0-n_1) \times (n_0-n_2)  \f]
     """
     (n0, n1, n2) = self.nodePositions()
     a = n0 - n1
     b = n0 - n2
     area = Area(a, b)
     return area
Esempio n. 7
0
    def AreaCentroid(self, debug=False):
        """
        @code
        1-----2
        |    /|
        | A1/ |
        |  /  |
        |/ A2 |
        4-----3

        centroid
           c = sum(ci*Ai)/sum(A)
           where:
             c=centroid
             A=area
        @endcode
        """
        #if debug:
        #    print("nodes = %s" %(self.nodes))
        (n1, n2, n3, n4) = self.nodePositions()
        a = n1 - n2
        b = n2 - n4
        area1 = Area(a, b)
        c1 = self.CentroidTriangle(n1, n2, n4)

        a = n2 - n4
        b = n2 - n3
        area2 = Area(a, b)
        c2 = self.CentroidTriangle(n2, n3, n4)

        area = area1 + area2
        centroid = (c1 * area1 + c2 * area2) / area
        if debug:
            print("c1=%s \n c2=%s \n a1=%s a2=%s" % (c1, c2, area1, area2))
            print("type(centroid=%s centroid=%s \n" %
                  (type(centroid), centroid))
        return (area, centroid)