Exemplo n.º 1
0
    def _compute_jacobians(self, nbs_jac=1):
        num = self._num
        topo = self._topo
        diff = self.diff
        bspline = self._bspline
        mult = self._mult
        vert_indices = self._vert_indices
        edge_indices = self._edge_indices
        surf_indices = self._surf_indices
        str_indices = self._str_indices
        size = self._size
        jac = self.jac

        nnz = BSElib.computeennz(num['surf'], num['edge'],
                                 num['vert'], num['group'],
                                 topo['surf_ptrs'], topo['surf_group'],
                                 mult['diff_vert'], mult['diff_edge'],
                                 bspline['num_cp'])
        data, rows, cols \
            = BSElib.computeemtx(nnz, num['surf'], num['edge'],
                                 num['vert'], num['group'],
                                 topo['surf_ptrs'], topo['surf_group'],
                                 surf_indices['df'], edge_indices['df'],
                                 str_indices['df'], vert_indices,
                                 mult['vert'], mult['edge'],
                                 mult['diff_vert'], mult['diff_edge'],
                                 bspline['num_cp'])
        jac['d(df)/d(df_str)'] \
            = scipy.sparse.csr_matrix((data, (rows-1, cols-1)),
                                      shape=(size['df'],
                                             size['df_str']))
            
                                 
        nnz = BSElib.computednnz(num['surf'], num['edge'],
                                num['vert'], num['group'],
                                topo['surf_group'], topo['edge_group'],
                                diff['surf'], diff['edge'],
                                mult['diff_vert'], mult['diff_edge'],
                                bspline['num_cp'])
        data, rows, cols \
            = BSElib.computedmtx(nnz, num['surf'], num['edge'],
                                 num['vert'], num['group'],
                                 topo['surf_group'], topo['edge_group'],
                                 topo['surf_ptrs'], topo['edge_ptrs'],
                                 diff['surf'], diff['edge'],
                                 mult['diff_vert'], mult['diff_edge'],
                                 surf_indices['df'], surf_indices['cp'],
                                 edge_indices['df'], edge_indices['cp'],
                                 vert_indices, bspline['num_cp'])
        jac['d(cp)/d(df)'] \
            = scipy.sparse.csr_matrix((data, (rows-1, cols-1)),
                                      shape=(size['cp'],
                                             size['df']))

        nnz = size['cp_str']
        data, rows, cols \
            = BSElib.computecmtx(nnz, num['surf'], num['edge'], num['group'],
                                 topo['surf_ptrs'], topo['surf_group'],
                                 surf_indices['cp'], edge_indices['cp'],
                                 str_indices['cp'], bspline['num_cp'])
        jac['d(cp_str)/d(cp)'] \
            = scipy.sparse.csr_matrix((data, (rows-1, cols-1)),
                                      shape=(size['cp_str'],
                                             size['cp']))

        nnz = BSElib.computebnnz(num['surf'], num['group'],
                                topo['surf_group'],
                                bspline['order'], bspline['num_pt'])
        uder = [0, 1, 0, 2, 1, 0]
        vder = [0, 0, 1, 0, 1, 2]
        name = ['', '_du', '_dv', '_duu', '_duv', '_dvv']
        for k in xrange(nbs_jac):
            data, rows, cols \
                = BSElib.computebmtx(nnz, num['surf'], num['group'], 
                                     uder[k], vder[k],
                                     str_indices['cp'], str_indices['pt'],
                                     topo['surf_group'], bspline['order'],
                                     bspline['num_cp'], bspline['num_pt'])
            jac['d(pt_str)/d(cp_str)' + name[k]] \
                = scipy.sparse.csr_matrix((data, (rows-1, cols-1)),
                                          shape=(size['pt_str'],
                                                 size['cp_str']))

        nnz = size['pt_str']
        data, rows, cols \
            = BSElib.computepmtx(nnz, num['surf'], num['edge'],
                                 num['vert'], num['group'],
                                 topo['surf_ptrs'], topo['surf_group'],
                                 surf_indices['pt'], edge_indices['pt'],
                                 str_indices['pt'], mult['vert'],
                                 mult['edge'], bspline['num_pt'])
        jac['d(pt)/d(pt_str)'] \
            = scipy.sparse.csr_matrix((data, (rows-1, cols-1)),
                                      shape=(size['pt'],
                                             size['pt_str']))
Exemplo n.º 2
0
    def _compute_jacobians(self, nbs_jac=1):
        num = self._num
        topo = self._topo
        diff = self.diff
        bspline = self._bspline
        mult = self._mult
        vert_indices = self._vert_indices
        edge_indices = self._edge_indices
        surf_indices = self._surf_indices
        str_indices = self._str_indices
        size = self._size
        jac = self.jac

        nnz = BSElib.computeennz(num['surf'], num['edge'], num['vert'],
                                 num['group'], topo['surf_ptrs'],
                                 topo['surf_group'], mult['diff_vert'],
                                 mult['diff_edge'], bspline['num_cp'])
        data, rows, cols \
            = BSElib.computeemtx(nnz, num['surf'], num['edge'],
                                 num['vert'], num['group'],
                                 topo['surf_ptrs'], topo['surf_group'],
                                 surf_indices['df'], edge_indices['df'],
                                 str_indices['df'], vert_indices,
                                 mult['vert'], mult['edge'],
                                 mult['diff_vert'], mult['diff_edge'],
                                 bspline['num_cp'])
        jac['d(df)/d(df_str)'] \
            = scipy.sparse.csr_matrix((data, (rows-1, cols-1)),
                                      shape=(size['df'],
                                             size['df_str']))

        nnz = BSElib.computednnz(num['surf'], num['edge'], num['vert'],
                                 num['group'], topo['surf_group'],
                                 topo['edge_group'], diff['surf'],
                                 diff['edge'], mult['diff_vert'],
                                 mult['diff_edge'], bspline['num_cp'])
        data, rows, cols \
            = BSElib.computedmtx(nnz, num['surf'], num['edge'],
                                 num['vert'], num['group'],
                                 topo['surf_group'], topo['edge_group'],
                                 topo['surf_ptrs'], topo['edge_ptrs'],
                                 diff['surf'], diff['edge'],
                                 mult['diff_vert'], mult['diff_edge'],
                                 surf_indices['df'], surf_indices['cp'],
                                 edge_indices['df'], edge_indices['cp'],
                                 vert_indices, bspline['num_cp'])
        jac['d(cp)/d(df)'] \
            = scipy.sparse.csr_matrix((data, (rows-1, cols-1)),
                                      shape=(size['cp'],
                                             size['df']))

        nnz = size['cp_str']
        data, rows, cols \
            = BSElib.computecmtx(nnz, num['surf'], num['edge'], num['group'],
                                 topo['surf_ptrs'], topo['surf_group'],
                                 surf_indices['cp'], edge_indices['cp'],
                                 str_indices['cp'], bspline['num_cp'])
        jac['d(cp_str)/d(cp)'] \
            = scipy.sparse.csr_matrix((data, (rows-1, cols-1)),
                                      shape=(size['cp_str'],
                                             size['cp']))

        nnz = BSElib.computebnnz(num['surf'], num['group'], topo['surf_group'],
                                 bspline['order'], bspline['num_pt'])
        uder = [0, 1, 0, 2, 1, 0]
        vder = [0, 0, 1, 0, 1, 2]
        name = ['', '_du', '_dv', '_duu', '_duv', '_dvv']
        for k in xrange(nbs_jac):
            data, rows, cols \
                = BSElib.computebmtx(nnz, num['surf'], num['group'],
                                     uder[k], vder[k],
                                     str_indices['cp'], str_indices['pt'],
                                     topo['surf_group'], bspline['order'],
                                     bspline['num_cp'], bspline['num_pt'])
            jac['d(pt_str)/d(cp_str)' + name[k]] \
                = scipy.sparse.csr_matrix((data, (rows-1, cols-1)),
                                          shape=(size['pt_str'],
                                                 size['cp_str']))

        nnz = size['pt_str']
        data, rows, cols \
            = BSElib.computepmtx(nnz, num['surf'], num['edge'],
                                 num['vert'], num['group'],
                                 topo['surf_ptrs'], topo['surf_group'],
                                 surf_indices['pt'], edge_indices['pt'],
                                 str_indices['pt'], mult['vert'],
                                 mult['edge'], bspline['num_pt'])
        jac['d(pt)/d(pt_str)'] \
            = scipy.sparse.csr_matrix((data, (rows-1, cols-1)),
                                      shape=(size['pt'],
                                             size['pt_str']))