Example #1
0
    def computeJacobian(self):
        """ Compute the global Jacobian """

        self.nJ = PUBSlib.computejnnz(self.nsurf,self.nedge,self.ngroup,self.nvert,self.surf_edge,self.edge_group,self.group_k,self.group_n,self.edge_count)
        Ja, Ji, Jj = PUBSlib.computejacobian(self.nJ, self.nT, self.nD, self.nsurf, self.nedge, self.ngroup, self.nvert, self.surf_vert, self.surf_edge, self.edge_group, self.group_k, self.group_m, self.group_n, self.group_d, self.surf_index_P, self.edge_index_P, self.surf_index_C, self.edge_index_C, self.knot_index, self.edge_count, self.T)
        self.J = scipy.sparse.csc_matrix((Ja,(Ji,Jj)))

        self.Nuv = PUBSlib.getsurfacesizes(self.nsurf, self.nedge, self.ngroup, self.surf_edge, self.edge_group, self.group_n)
        self.Np0 = numpy.zeros(self.nsurf+1)
        for s in range(self.nsurf+1):
            self.Np0[s] = int(sum(self.Nuv[:s,0]*self.Nuv[:s,1]))
        surf = numpy.zeros(self.Np0[-1],int)
        u = numpy.zeros(self.Np0[-1])
        v = numpy.zeros(self.Np0[-1])
        for s in range(self.nsurf):
            T = PUBSlib.getsurfacet(s+1, self.Nuv[s,0], self.Nuv[s,1], self.nT, self.nsurf, self.nedge, self.surf_edge, self.surf_index_P, self.edge_index_P, self.T)
            surf[self.Np0[s]:self.Np0[s+1]] = s
            u[self.Np0[s]:self.Np0[s+1]] = T[:,:,0].flatten(order='F')
            v[self.Np0[s]:self.Np0[s+1]] = T[:,:,1].flatten(order='F')
        self.J0 = self.evaluateBases(surf, u, v, 0, 0)
        self.Ju = self.evaluateBases(surf, u, v, 1, 0)
        self.Jv = self.evaluateBases(surf, u, v, 0, 1)

        self.nM = PUBSlib.computemnnz(self.nsurf,self.nedge,self.ngroup,self.nvert,self.surf_edge,self.edge_group,self.group_m,self.surf_index_C, self.edge_index_Q, self.vert_index_Q, self.edge_count, self.surf_c1, self.edge_c1)
        Ma, Mi, Mj = PUBSlib.computedofmapping(self.nM,self.nsurf,self.nedge,self.ngroup,self.nvert,self.surf_vert,self.surf_edge,self.edge_group,self.group_m,self.surf_index_C,self.edge_index_C,self.edge_index_Q,self.vert_index_Q, self.edge_count,self.surf_c1,self.edge_c1)
        self.M = scipy.sparse.csc_matrix((Ma,(Mi,Mj)))
        self.JM = self.J.dot(self.M)

        if self.printInfo:
            print '# Jacobian non-zeros =',self.JM.nnz
Example #2
0
    def computeJacobian(self):
        """ Compute the global Jacobian """

        self.nJ = PUBSlib.computejnnz(self.nsurf, self.nedge, self.ngroup,
                                      self.nvert, self.surf_edge,
                                      self.edge_group, self.group_k,
                                      self.group_n, self.edge_count)
        Ja, Ji, Jj = PUBSlib.computejacobian(
            self.nJ, self.nT, self.nD, self.nsurf, self.nedge, self.ngroup,
            self.nvert, self.surf_vert, self.surf_edge, self.edge_group,
            self.group_k, self.group_m, self.group_n, self.group_d,
            self.surf_index_P, self.edge_index_P, self.surf_index_C,
            self.edge_index_C, self.knot_index, self.edge_count, self.T)
        self.J = scipy.sparse.csc_matrix((Ja, (Ji, Jj)))

        self.Nuv = PUBSlib.getsurfacesizes(self.nsurf, self.nedge, self.ngroup,
                                           self.surf_edge, self.edge_group,
                                           self.group_n)
        self.Np0 = numpy.zeros(self.nsurf + 1)
        for s in range(self.nsurf + 1):
            self.Np0[s] = int(sum(self.Nuv[:s, 0] * self.Nuv[:s, 1]))
        surf = numpy.zeros(self.Np0[-1], int)
        u = numpy.zeros(self.Np0[-1])
        v = numpy.zeros(self.Np0[-1])
        for s in range(self.nsurf):
            T = PUBSlib.getsurfacet(s + 1, self.Nuv[s, 0], self.Nuv[s, 1],
                                    self.nT, self.nsurf, self.nedge,
                                    self.surf_edge, self.surf_index_P,
                                    self.edge_index_P, self.T)
            surf[self.Np0[s]:self.Np0[s + 1]] = s
            u[self.Np0[s]:self.Np0[s + 1]] = T[:, :, 0].flatten(order='F')
            v[self.Np0[s]:self.Np0[s + 1]] = T[:, :, 1].flatten(order='F')
        self.J0 = self.evaluateBases(surf, u, v, 0, 0)
        self.Ju = self.evaluateBases(surf, u, v, 1, 0)
        self.Jv = self.evaluateBases(surf, u, v, 0, 1)

        self.nM = PUBSlib.computemnnz(self.nsurf, self.nedge, self.ngroup,
                                      self.nvert, self.surf_edge,
                                      self.edge_group, self.group_m,
                                      self.surf_index_C, self.edge_index_Q,
                                      self.vert_index_Q, self.edge_count,
                                      self.surf_c1, self.edge_c1)
        Ma, Mi, Mj = PUBSlib.computedofmapping(
            self.nM, self.nsurf, self.nedge, self.ngroup, self.nvert,
            self.surf_vert, self.surf_edge, self.edge_group, self.group_m,
            self.surf_index_C, self.edge_index_C, self.edge_index_Q,
            self.vert_index_Q, self.edge_count, self.surf_c1, self.edge_c1)
        self.M = scipy.sparse.csc_matrix((Ma, (Mi, Mj)))
        self.JM = self.J.dot(self.M)

        if self.printInfo:
            print '# Jacobian non-zeros =', self.JM.nnz
Example #3
0
    def write2EGADS(self, filename):
        """ BROKEN """
        model = self.model
        Ps = []
        for surf in range(model.nsurf):
            ugroup = model.edge_group[abs(model.surf_edge[surf, 0, 0]) - 1]
            vgroup = model.edge_group[abs(model.surf_edge[surf, 1, 0]) - 1]
            nu = model.group_n[ugroup - 1]
            nv = model.group_n[vgroup - 1]
            P = PUBSlib.getsurfacep(surf + 1, model.nP, nu, nv, model.nvar,
                                    model.nsurf, model.nedge, model.nvert,
                                    model.surf_vert, model.surf_edge,
                                    model.surf_index_P, model.edge_index_P,
                                    model.P)
            Ps.append(P[:, :, :])
            Ps.append(copy.copy(P[::-1, :, :]))
            Ps[-1][:, :, 2] *= -1

        oml0 = PUBS.PUBS(Ps)

        file = open(filename + '.dat', "w")

        file.write(str(oml0.nvert) + '\n')
        file.write(str(oml0.nedge) + '\n')
        file.write(str(oml0.nsurf) + '\n')

        for i in range(oml0.nvert):
            file.write(str(oml0.C[i, 0]) + ' ')
            file.write(str(oml0.C[i, 1]) + ' ')
            file.write(str(oml0.C[i, 2]) + '\n')

        edgePtr = numpy.zeros((oml0.nedge, 3), int)
        for i in range(oml0.nsurf):
            for u in range(2):
                for v in range(2):
                    edgePtr[abs(oml0.surf_edge[i, u, v]) - 1, :] = [i, u, v]
        ms = PUBSlib.getsurfacesizes(oml0.nsurf, oml0.nedge, oml0.ngroup,
                                     oml0.surf_edge, oml0.edge_group,
                                     oml0.group_m)
        for i in range(oml0.nedge):
            surf = edgePtr[i, 0]
            edge0 = edgePtr[i, 1]
            edge1 = edgePtr[i, 2]
            if edge0 == 0:
                if edge1 == 0:
                    start = [0, 0]
                    end = [1, 0]
                else:
                    start = [0, 1]
                    end = [1, 1]
            else:
                if edge1 == 0:
                    start = [0, 0]
                    end = [0, 1]
                else:
                    start = [1, 0]
                    end = [1, 1]
            if oml0.surf_edge[surf, edge0, edge1] < 0:
                temp = start
                start = end
                end = temp
            file.write(str(oml0.surf_vert[surf, start[0], start[1]]) + ' ')
            file.write(str(oml0.surf_vert[surf, end[0], end[1]]) + '\n')
            group = oml0.edge_group[i] - 1
            k = oml0.group_k[group]
            m = oml0.group_m[group]
            file.write(str(k) + ' ')
            file.write(str(m) + '\n')
            d = oml0.group_d[oml0.knot_index[group, 0]:oml0.knot_index[group,
                                                                       1]]
            for j in range(d.shape[0]):
                file.write(str(d[j]) + ' ')
            file.write('\n')
            C = PUBSlib.getsurfacep(surf + 1, oml0.nC, ms[surf, 0],
                                    ms[surf, 1], oml0.nvar, oml0.nsurf,
                                    oml0.nedge, oml0.nvert, oml0.surf_vert,
                                    oml0.surf_edge, oml0.surf_index_C,
                                    oml0.edge_index_C, oml0.C)
            if edge0 == 0:
                if edge1 == 0:
                    edgeCs = copy.copy(C[:, 0, :])
                else:
                    edgeCs = copy.copy(C[:, -1, :])
            else:
                if edge1 == 0:
                    edgeCs = copy.copy(C[0, :, :])
                else:
                    edgeCs = copy.copy(C[-1, :, :])
            if oml0.surf_edge[surf, edge0, edge1] < 0:
                edgeCs[:, :] = copy.copy(edgeCs[::-1, :])
            for j in range(edgeCs.shape[0]):
                file.write(str(edgeCs[j, 0]) + ' ')
                file.write(str(edgeCs[j, 1]) + ' ')
                file.write(str(edgeCs[j, 2]) + '\n')

        for i in range(oml0.nsurf):
            for u in range(2):
                for v in range(2):
                    file.write(str(oml0.surf_edge[i, u, v]) + ' ')
            file.write('\n')
            ugroup = oml0.edge_group[abs(oml0.surf_edge[i, 0, 0]) - 1] - 1
            vgroup = oml0.edge_group[abs(oml0.surf_edge[i, 1, 0]) - 1] - 1
            ku = oml0.group_k[ugroup]
            mu = oml0.group_m[ugroup]
            kv = oml0.group_k[vgroup]
            mv = oml0.group_m[vgroup]
            file.write(str(ku) + ' ')
            file.write(str(mu) + ' ')
            file.write(str(kv) + ' ')
            file.write(str(mv) + ' ')
            file.write('\n')
            d = oml0.group_d[oml0.knot_index[ugroup, 0]:oml0.knot_index[ugroup,
                                                                        1]]
            for j in range(d.shape[0]):
                file.write(str(d[j]) + ' ')
            file.write('\n')
            d = oml0.group_d[oml0.knot_index[vgroup, 0]:oml0.knot_index[vgroup,
                                                                        1]]
            for j in range(d.shape[0]):
                file.write(str(d[j]) + ' ')
            file.write('\n')
            C = PUBSlib.getsurfacep(i + 1, oml0.nC, ms[i, 0], ms[i, 1],
                                    oml0.nvar, oml0.nsurf, oml0.nedge,
                                    oml0.nvert, oml0.surf_vert, oml0.surf_edge,
                                    oml0.surf_index_C, oml0.edge_index_C,
                                    oml0.C)
            for v in range(C.shape[1]):
                for u in range(C.shape[0]):
                    file.write(str(C[u, v, 0]) + ' ')
                    file.write(str(C[u, v, 1]) + ' ')
                    file.write(str(C[u, v, 2]) + '\n')

        file.close()
Example #4
0
    def write2EGADS(self,filename):
        """ BROKEN """
        model = self.model
        Ps = []
        for surf in range(model.nsurf):
            ugroup = model.edge_group[abs(model.surf_edge[surf,0,0])-1]
            vgroup = model.edge_group[abs(model.surf_edge[surf,1,0])-1]
            nu = model.group_n[ugroup-1]
            nv = model.group_n[vgroup-1]      
            P = PUBSlib.getsurfacep(surf+1, model.nP, nu, nv, model.nvar, model.nsurf, model.nedge, model.nvert, model.surf_vert, model.surf_edge, model.surf_index_P, model.edge_index_P, model.P)
            Ps.append(P[:,:,:])
            Ps.append(copy.copy(P[::-1,:,:]))
            Ps[-1][:,:,2] *= -1

        oml0 = PUBS.PUBS(Ps)

        file = open(filename+'.dat',"w")

        file.write(str(oml0.nvert)+'\n')
        file.write(str(oml0.nedge)+'\n')
        file.write(str(oml0.nsurf)+'\n')

        for i in range(oml0.nvert):
            file.write(str(oml0.C[i,0])+' ')
            file.write(str(oml0.C[i,1])+' ')
            file.write(str(oml0.C[i,2])+'\n')

        edgePtr = numpy.zeros((oml0.nedge,3),int)
        for i in range(oml0.nsurf):
            for u in range(2):
                for v in range(2):
                    edgePtr[abs(oml0.surf_edge[i,u,v])-1,:] = [i,u,v]
        ms = PUBSlib.getsurfacesizes(oml0.nsurf, oml0.nedge, oml0.ngroup, oml0.surf_edge, oml0.edge_group, oml0.group_m)
        for i in range(oml0.nedge):
            surf = edgePtr[i,0]
            edge0 = edgePtr[i,1]
            edge1 = edgePtr[i,2]
            if edge0==0:
                if edge1==0:
                    start = [0,0]
                    end = [1,0]
                else:
                    start = [0,1]
                    end = [1,1]
            else:
                if edge1==0:
                    start = [0,0]
                    end = [0,1]
                else:
                    start = [1,0]
                    end = [1,1]
            if oml0.surf_edge[surf,edge0,edge1] < 0:
                temp = start
                start = end
                end = temp
            file.write(str(oml0.surf_vert[surf,start[0],start[1]])+' ')
            file.write(str(oml0.surf_vert[surf,end[0],end[1]])+'\n')
            group = oml0.edge_group[i] - 1
            k = oml0.group_k[group]
            m = oml0.group_m[group]
            file.write(str(k)+' ')
            file.write(str(m)+'\n')
            d = oml0.group_d[oml0.knot_index[group,0]:oml0.knot_index[group,1]]
            for j in range(d.shape[0]):
                file.write(str(d[j])+' ')
            file.write('\n')
            C = PUBSlib.getsurfacep(surf+1, oml0.nC, ms[surf,0], ms[surf,1], oml0.nvar, oml0.nsurf, oml0.nedge, oml0.nvert, oml0.surf_vert, oml0.surf_edge, oml0.surf_index_C, oml0.edge_index_C, oml0.C)
            if edge0==0:
                if edge1==0:
                    edgeCs = copy.copy(C[:,0,:])
                else:
                    edgeCs = copy.copy(C[:,-1,:])
            else:
                if edge1==0:
                    edgeCs = copy.copy(C[0,:,:])
                else:
                    edgeCs = copy.copy(C[-1,:,:])
            if oml0.surf_edge[surf,edge0,edge1] < 0:
                edgeCs[:,:] = copy.copy(edgeCs[::-1,:])
            for j in range(edgeCs.shape[0]):
                file.write(str(edgeCs[j,0])+' ')
                file.write(str(edgeCs[j,1])+' ')
                file.write(str(edgeCs[j,2])+'\n')

        for i in range(oml0.nsurf):
            for u in range(2):
                for v in range(2):
                    file.write(str(oml0.surf_edge[i,u,v])+' ')
            file.write('\n')
            ugroup = oml0.edge_group[abs(oml0.surf_edge[i,0,0])-1] - 1
            vgroup = oml0.edge_group[abs(oml0.surf_edge[i,1,0])-1] - 1
            ku = oml0.group_k[ugroup]
            mu = oml0.group_m[ugroup]
            kv = oml0.group_k[vgroup]
            mv = oml0.group_m[vgroup]
            file.write(str(ku)+' ')
            file.write(str(mu)+' ')
            file.write(str(kv)+' ')
            file.write(str(mv)+' ')
            file.write('\n')    
            d = oml0.group_d[oml0.knot_index[ugroup,0]:oml0.knot_index[ugroup,1]]
            for j in range(d.shape[0]):
                file.write(str(d[j])+' ')
            file.write('\n') 
            d = oml0.group_d[oml0.knot_index[vgroup,0]:oml0.knot_index[vgroup,1]]
            for j in range(d.shape[0]):
                file.write(str(d[j])+' ')
            file.write('\n')
            C = PUBSlib.getsurfacep(i+1, oml0.nC, ms[i,0], ms[i,1], oml0.nvar, oml0.nsurf, oml0.nedge, oml0.nvert, oml0.surf_vert, oml0.surf_edge, oml0.surf_index_C, oml0.edge_index_C, oml0.C)
            for v in range(C.shape[1]):
                for u in range(C.shape[0]):
                    file.write(str(C[u,v,0])+' ')
                    file.write(str(C[u,v,1])+' ')
                    file.write(str(C[u,v,2])+'\n')

        file.close()