Example #1
0
    def compute(self, name):
        loc = self._loc

        fu = self._fcomp._num_cp_list['u']
        #####################################################
        if not self._fcomp_other is None:
            fu = numpy.concatenate((fu, self._fcomp_other._num_cp_list['u']),
                                   axis=0)
        #####################################################
        fv = self._fcomp._num_cp_list['v']
        fu, fv = self._flip(fu, fv)
        fu1 = sum(fu[:loc['u']])
        fu2 = sum(fu[:loc['u'] + 2])
        fv1 = sum(fv[:loc['v']])
        fv2 = sum(fv[:loc['v'] + 2 + self._num_surf_wing])

        fFace_inds = self._rotate(self._fcomp.vec_inds['cp_bez'])
        #####################################################
        if not self._fcomp_other is None:
            fFace_inds = numpy.concatenate(
                (fFace_inds[0:-1],
                 self._rotate(self._fcomp_other.vec_inds['cp_bez'])),
                axis=0)
        #####################################################
        fFace_inds = fFace_inds[fu1:fu2 + 1, fv1:fv2 + 1]

        num_u = [fu[loc['u']] + 1, 4, fu[loc['u'] + 1] + 1]
        num_v = [
            fv[loc['v']] + 1,
            sum(fv[loc['v'] + 1:loc['v'] + 1 + self._num_surf_wing]) + 1,
            fv[loc['v'] + 1 + self._num_surf_wing] + 1
        ]
        nu0 = sum(num_u) - 2
        nv0 = sum(num_v) - 2

        if name == 'cp_prim':  #If we are at the cp_prim step...
            return super(PGMjunction, self).compute(
                name)  #Call the function that sets up the normal properties
        elif name == 'cp_bez':
            mcomp = self._mcomp
            if self._side == 'right':
                W = numpy.zeros((4, 2, 3), order='F')
                E = numpy.zeros((4, 2, 3), order='F')
                N = mcomp.faces['upp'].vec_inds['cp_prim'][::-1, :2, :]
                S = mcomp.faces['low'].vec_inds['cp_prim'][:, :2, :]
            elif self._side == 'left':
                W = numpy.zeros((4, 2, 3), order='F')
                E = numpy.zeros((4, 2, 3), order='F')
                N = mcomp.faces['upp'].vec_inds['cp_prim'][:, -1:-3:-1, :]
                S = mcomp.faces['low'].vec_inds['cp_prim'][::-1, -1:-3:-1, :]

            fInds = -numpy.ones((nu0, nv0, 3), dtype=int, order='F')
            fInds[:num_u[0], :] = fFace_inds[:num_u[0], :]
            fInds[-num_u[2]:, :] = fFace_inds[-num_u[2]:, :]

            nD = 3 * 2 * nv0 + 3 * 2 * (nu0 - 2)
            nD += 3 * 2
            if num_u[1] != 1:
                nD += 3 * 2
            nD += 3 * 2 * (num_v[1] - 2)
            if num_u[1] != 1:
                nD += 3 * 2 * (num_u[1] - 2)
            nD += 3 * 4 * 2 * (num_u[0] - 2)
            nD += 3 * 4 * 2 * (num_u[2] - 2)
            nD += 3 * 4 * (num_v[0] - 2)
            nD += 3 * 4 * (num_v[2] - 2)
            if num_u[1] != 1:
                nD += 3 * 4 * (num_v[0] - 2)
                nD += 3 * 4 * (num_v[2] - 2)

            Da, Di, Dj = PGMlib.computejunctionwireframe(
                nD, nu0, nv0, num_u[0], num_u[1], num_u[2], num_v[0], num_v[1],
                num_v[2], self._fweight, self._mweight, W, E, N, S, fInds,
                self.faces[''].vec_inds['cp_bez'])
            Da = Da * (-1 != Dj)
            Dj = numpy.maximum(0, Dj)

            Das, Dis, Djs = super(PGMjunction, self).compute(
                name
            )  #We will recover identity matrices just to carry over the normal parameters (Check PGMinterpolant.py)
            return Das + [Da], Dis + [Di], Djs + [Dj]
        elif name == 'cp_coons':  #If we are at the cp_coons step...
            nD = 0
            for i in range(3):
                for j in range(3):
                    if (num_u[1] != 1) or (i != 1):
                        nD += 3 * 8 * (num_u[i] - 2) * (num_v[j] - 2)

            Das, Dis, Djs = super(PGMjunction, self).compute(
                name
            )  #We will recover identity matrices just to carry over the normal parameters (Check PGMinterpolant.py)
            Da, Di, Dj = PGMlib.computejunctioncoons(
                nD, nu0, nv0, num_u[0], num_u[1], num_u[2], num_v[0], num_v[1],
                num_v[2], self.faces[''].vec_inds['cp_coons'])
            return Das + [Da], Dis + [Di], Djs + [Dj]
Example #2
0
    def compute(self, name):
        loc = self._loc

        fu = self._fcomp._num_cp_list['u']
        fv = self._fcomp._num_cp_list['v']
        fu, fv = self._flip(fu, fv)
        fu1 = sum(fu[:loc['u']])
        fu2 = sum(fu[:loc['u'] + 2])
        fv1 = sum(fv[:loc['v']])
        fv2 = sum(fv[:loc['v'] + 2 + self._num_surf_wing])
        fFace_inds = self._rotate(self._fcomp.vec_inds['cp_bez'])
        fFace_inds = fFace_inds[fu1:fu2 + 1, fv1:fv2 + 1]

        mcomp = self._mcomp
        if self._side == 'right':
            W = numpy.zeros((4, 2, 3), order='F')
            E = numpy.zeros((4, 2, 3), order='F')
            N = mcomp.faces['upp'].vec_inds['cp_prim'][::-1, :2, :]
            S = mcomp.faces['low'].vec_inds['cp_prim'][:, :2, :]
        elif self._side == 'left':
            W = numpy.zeros((4, 2, 3), order='F')
            E = numpy.zeros((4, 2, 3), order='F')
            N = mcomp.faces['upp'].vec_inds['cp_prim'][:, -1:-3:-1, :]
            S = mcomp.faces['low'].vec_inds['cp_prim'][::-1, -1:-3:-1, :]

        num_u = [fu[loc['u']] + 1, 4, fu[loc['u'] + 1] + 1]
        num_v = [
            fv[loc['v']] + 1,
            sum(fv[loc['v'] + 1:loc['v'] + 1 + self._num_surf_wing]) + 1,
            fv[loc['v'] + 1 + self._num_surf_wing] + 1
        ]
        nu0 = sum(num_u) - 2
        nv0 = sum(num_v) - 2
        fInds = -numpy.ones((nu0, nv0, 3), dtype=int, order='F')
        fInds[:num_u[0], :] = fFace_inds[:num_u[0], :]
        fInds[-num_u[2]:, :] = fFace_inds[-num_u[2]:, :]

        nD = 3 * 2 * nv0 + 3 * 2 * (nu0 - 2)
        nD += 3 * 2
        if num_u[1] != 1:
            nD += 3 * 2
        nD += 3 * 2 * (num_v[1] - 2)
        if num_u[1] != 1:
            nD += 3 * 2 * (num_u[1] - 2)
        nD += 3 * 4 * 2 * (num_u[0] - 2)
        nD += 3 * 4 * 2 * (num_u[2] - 2)
        nD += 3 * 4 * (num_v[0] - 2)
        nD += 3 * 4 * (num_v[2] - 2)
        if num_u[1] != 1:
            nD += 3 * 4 * (num_v[0] - 2)
            nD += 3 * 4 * (num_v[2] - 2)

        Da, Di, Dj = PGMlib.computejunctionwireframe(
            nD, nu0, nv0, num_u[0], num_u[1], num_u[2], num_v[0], num_v[1],
            num_v[2], self._fweight, self._mweight, W, E, N, S, fInds,
            self.faces[''].vec_inds['cp_bez'])
        Da = Da * (-1 != Dj)
        Dj = numpy.maximum(0, Dj)

        Das, Dis, Djs = [Da], [Di], [Dj]
        if name == 'cp_bez':
            return Das, Dis, Djs
        elif name == 'cp_coons':
            nD = 0
            for i in range(3):
                for j in range(3):
                    if (num_u[1] != 1) or (i != 1):
                        nD += 3 * 8 * (num_u[i] - 2) * (num_v[j] - 2)

            Da, Di, Dj = PGMlib.computejunctioncoons(
                nD, nu0, nv0, num_u[0], num_u[1], num_u[2], num_v[0], num_v[1],
                num_v[2], self.faces[''].vec_inds['cp_coons'])
            Das.append(Da)
            Dis.append(Di)
            Djs.append(Dj)
            return Das, Dis, Djs
        elif name == 'cp_prim':
            return [], [], []