Exemplo n.º 1
0
        Bt = PP[0:V.dim(), V.dim():W.dim()]
        d = spdiags(1.0 / Xdiag, 0, len(Xdiag), len(Xdiag))
        dBt = (d * Bt).tocsr()

        plt.spy(dBt)
        plt.show()
        BQB = Bt.transpose() * dBt
        dBt = PETSc.Mat().createAIJ(size=dBt.shape,
                                    csr=(dBt.indptr, dBt.indices, dBt.data))
        print dBt.size
        BQB = PETSc.Mat().createAIJ(size=BQB.tocsr().shape,
                                    csr=(BQB.tocsr().indptr,
                                         BQB.tocsr().indices,
                                         BQB.tocsr().data))
        # parameters['linear_algebra_backend'] = 'PETSc'
        kspBQB = NSprecondSetup.Ksp(BQB)
    elif Solver == "PCD":
        N = FacetNormal(mesh)
        h = CellSize(mesh)
        h_avg = avg(h)
        alpha = 10.0
        gamma = 10.0

        (pQ) = TrialFunction(Q)
        (qQ) = TestFunction(Q)
        print MU
        Mass = assemble(inner(pQ, qQ) * dx)
        L = MU * (inner(grad(qQ), grad(pQ)) * dx(mesh))

        #        O = - dot(u_k, n)*pQ('+')*qQ*ds(mesh) - dot(u_k, n)*(pQ('+') - pQ('-'))*qQ('-')*dS(mesh)
        pp = Function(Q)
Exemplo n.º 2
0
        Mass = assemble(inner(u,v)*dx)
        B = assemble(-div(v)*p*dx)
        bc = DirichletBC(V,Expression(("0.0","0.0")), boundary)
        #bc.apply(Mass)

        Mass = Mass.sparray()
        MassD = Mass.diagonal()
        del Mass
        B = B.sparray()
        
        d = spdiags(1.0/MassD, 0, len(MassD), len(MassD))
        QB = d*B
        L = B.transpose()*QB
        L = PETSc.Mat().createAIJ(size=L.shape,csr=(L.indptr, L.indices, L.data))
        QB = PETSc.Mat().createAIJ(size=QB.shape,csr=(QB.indptr, QB.indices, QB.data))
        KspL = NSsetup.Ksp(L)
    elif Solver == "PCD":
        (pQ) = TrialFunction(Q)
        (qQ) = TestFunction(Q)
        print MU
        Mass = assemble(inner(pQ,qQ)*dx)
        L = assemble(inner(grad(pQ),grad(qQ))*dx)

        fp = MU*inner(grad(qQ), grad(pQ))*dx+inner((u_k[0]*grad(pQ)[0]+u_k[1]*grad(pQ)[1]),qQ)*dx + (1./2)*div(u_k)*inner(pQ,qQ)*dx - (1./2)*(u_k[0]*n[0]+u_k[1]*n[1])*inner(pQ,qQ)*ds
        L = CP.Assemble(L)
        Mass = CP.Assemble(Mass)

    # print L
    SolutionTime = 0
    while eps > tol and iter < maxiter:
        iter += 1