def computeStructure(self, P): oml0 = self.oml0 Ms = self.Ms Js = self.Js layout = self.layout skinIndices = self.getSkinIndices() C = numpy.zeros((4,2),order='F') As = [] Jns = [] Jus = [] col = 0 for s in range(len(skinIndices)): n = max(self.quad_indices[:,s])*self.layout.n**2 Aa = numpy.ones(n) Ai = numpy.linspace(0, n-1, n) Aj = numpy.linspace(0, n-1, n) + col As.append(scipy.sparse.csr_matrix((Aa,(Ai,Aj)), shape=(n,P.shape[0]))) Jn = [] Ju = [] col += n for f in skinIndices[s]: for k in range(Js[f].shape[0]): C[0,:] = oml0.C[Ms[f][Js[f][k,0],Js[f][k,1]],:2] C[1,:] = oml0.C[Ms[f][Js[f][k,0],Js[f][k,3]],:2] C[2,:] = oml0.C[Ms[f][Js[f][k,2],Js[f][k,1]],:2] C[3,:] = oml0.C[Ms[f][Js[f][k,2],Js[f][k,3]],:2] nu1, nu2, nv1, nv2 = layout.countJunctionEdges(self.JQs[s], min(C[:,0]), max(C[:,0]), min(C[:,1]), max(C[:,1])) Jn.append([nu1, nu2, nv1, nv2]) Ju.append([min(C[:,0]), max(C[:,0]), min(C[:,1]), max(C[:,1])]) nP = layout.n*(nu1 + nu2 + nv1 + nv2) col += nP if Jn==[]: Jn.append([-1,-1,-1,-1]) Ju.append([-1,-1,-1,-1]) Jns.append(numpy.array(Jn, int, order='F')) Jus.append(numpy.array(Ju, order='F')) nM = len(self.keys) members = numpy.zeros((nM,34),order='F') for i in range(nM): member = self.members[self.keys[i]] members[i,:4] = [member.domain, member.shape, member.nmem, member.ndiv] members[i, 4:16] = member.A1 + member.B1 + member.C1 + member.D1 members[i,16:28] = member.A2 + member.B2 + member.C2 + member.D2 members[i,28:] = [member.tx, member.ty, member.rx, member.ry, member.n1, member.n2] nP, nS = PGMlib.countinternalnodes(self.layout.n, nM, members) P2, M, S = PGMlib.computeinternalnodes(nP, nS, self.layout.n, nM, members) nA = PGMlib.countannz(nP, layout.nvert, layout.nquad, layout.verts, layout.poly_vert, self.quad_indices, P2, M) if len(skinIndices)==1: Aa, Ai, Aj = PGMlib.assembleamtx(nA, self.layout.n, nP, Jns[0].shape[0], Jns[0].shape[0], self.layout.nvert, self.layout.nquad, Jns[0], Jns[0], Jus[0], Jus[0], self.quad_indices, self.layout.verts, self.layout.poly_vert, P2, M) else: Aa, Ai, Aj = PGMlib.assembleamtx(nA, self.layout.n, nP, Jns[0].shape[0], Jns[1].shape[0], self.layout.nvert, self.layout.nquad, Jns[0], Jns[1], Jus[0], Jus[1], self.quad_indices, self.layout.verts, self.layout.poly_vert, P2, M) As.append(scipy.sparse.csr_matrix((Aa,(Ai,Aj)), shape=(max(Ai)+1,P.shape[0]))) return As, S