Exemplo n.º 1
0
    def _compute_topology(self, initial_surfaces):
        """ Load an initial set of surfaces and compute the topology

        Arguments
        ---------
        initial_surfaces : list(nsurf) of double(nu, nv, 3)

        Returns
        -------
        nvert, nedge, ngroup : see __init__
        surf_vert : [int(nsurf, 2, 2)] surface to vertex mapping, 1-based
           (isurf, i, j) : u=i, v=j corner
        surf_edge : [int(nsurf, 2, 2)] surface to edge mapping, 1-based
           (isurf, 1, 1) : v=0 edge
           (isurf, 1, 2) : v=1 edge
           (isurf, 2, 1) : u=0 edge
           (isurf, 2, 2) : u=1 edge
        surf_group : [int(nsurf, 2)] surface to group mapping, 1-based
           (isurf, d) : d=0 for v=0, v=1 edges; d=1 for u=0, u=1 edges
        """

        nsurf = len(initial_surfaces)
        surfaces = numpy.zeros((nsurf, 3, 3, 3), float, 'F')

        for isurf in xrange(nsurf):
            surface = initial_surfaces[isurf]
            num_u, num_v = surface.shape[:2]
            mid_u1 = int(numpy.floor((num_u - 1) / 2.0))
            mid_u2 = int(numpy.ceil((num_u - 1) / 2.0))
            mid_v1 = int(numpy.floor((num_v - 1) / 2.0))
            mid_v2 = int(numpy.ceil((num_v - 1) / 2.0))

            for ind_u in xrange(2):
                for ind_v in xrange(2):
                    surfaces[isurf, -ind_u, -ind_v] = surface[-ind_u, -ind_v]

            for ind_u in xrange(2):
                surfaces[isurf, -ind_u, 1] += 0.5 * surface[-ind_u, mid_v1] + \
                                              0.5 * surface[-ind_u, mid_v2]

            for ind_v in xrange(2):
                surfaces[isurf, 1, -ind_v] += 0.5 * surface[mid_u1, -ind_v] + \
                                              0.5 * surface[mid_u2, -ind_v]

        nvert, nedge, surf_ptrs \
            = BSElib.computesurfconnectivities(nsurf, 1e-16, 1e-10, surfaces)

        edge_ptrs \
            = BSElib.computeedgeconnectivities(nsurf, nedge, surf_ptrs)

        ngroup, surf_group, edge_group \
            = BSElib.computegroups(nsurf, nedge, surf_ptrs)

        topology = [nvert, nedge, ngroup, \
                    surf_ptrs, edge_ptrs, \
                    surf_group, edge_group, \
                ]

        return topology
Exemplo n.º 2
0
    def _compute_topology(self, initial_surfaces):
        """ Load an initial set of surfaces and compute the topology

        Arguments
        ---------
        initial_surfaces : list(nsurf) of double(nu, nv, 3)

        Returns
        -------
        nvert, nedge, ngroup : see __init__
        surf_vert : [int(nsurf, 2, 2)] surface to vertex mapping, 1-based
           (isurf, i, j) : u=i, v=j corner
        surf_edge : [int(nsurf, 2, 2)] surface to edge mapping, 1-based
           (isurf, 1, 1) : v=0 edge
           (isurf, 1, 2) : v=1 edge
           (isurf, 2, 1) : u=0 edge
           (isurf, 2, 2) : u=1 edge
        surf_group : [int(nsurf, 2)] surface to group mapping, 1-based
           (isurf, d) : d=0 for v=0, v=1 edges; d=1 for u=0, u=1 edges
        """

        nsurf = len(initial_surfaces)
        surfaces = numpy.zeros((nsurf, 3, 3, 3), float, 'F')

        for isurf in xrange(nsurf):
            surface = initial_surfaces[isurf]
            num_u, num_v = surface.shape[:2]
            mid_u1 = int(numpy.floor((num_u - 1) / 2.0))
            mid_u2 = int(numpy.ceil((num_u - 1) / 2.0))
            mid_v1 = int(numpy.floor((num_v - 1) / 2.0))
            mid_v2 = int(numpy.ceil((num_v - 1) / 2.0))

            for ind_u in xrange(2):
                for ind_v in xrange(2):
                    surfaces[isurf, -ind_u, -ind_v] = surface[-ind_u, -ind_v]

            for ind_u in xrange(2):
                surfaces[isurf, -ind_u, 1] += 0.5 * surface[-ind_u, mid_v1] + \
                                              0.5 * surface[-ind_u, mid_v2]

            for ind_v in xrange(2):
                surfaces[isurf, 1, -ind_v] += 0.5 * surface[mid_u1, -ind_v] + \
                                              0.5 * surface[mid_u2, -ind_v]

        nvert, nedge, surf_ptrs \
            = BSElib.computesurfconnectivities(nsurf, 1e-16, 1e-10, surfaces)

        edge_ptrs \
            = BSElib.computeedgeconnectivities(nsurf, nedge, surf_ptrs)

        ngroup, surf_group, edge_group \
            = BSElib.computegroups(nsurf, nedge, surf_ptrs)

        topology = [nvert, nedge, ngroup, \
                    surf_ptrs, edge_ptrs, \
                    surf_group, edge_group, \
                ]

        return topology