Beispiel #1
0
def FluidLinearSetup(Pressure,mu):
    MO.PrintStr("Preconditioning Fluid linear setup",3,"=","\n\n")
    parameters['linear_algebra_backend'] = 'uBLAS'
    p = TrialFunction(Pressure)
    q = TestFunction(Pressure)

    N = FacetNormal(Pressure.mesh())
    h = CellSize(Pressure.mesh())
    h_avg =avg(h)

    alpha = 10.0
    gamma =10.0
    tic()
    if Pressure.__str__().find("CG") == -1:
        L = assemble(mu*(inner(grad(q), grad(p))*dx(Pressure.mesh()) \
                                - inner(avg(grad(q)), outer(p('+'),N('+'))+outer(p('-'),N('-')))*dS(Pressure.mesh()) \
                                - inner(outer(q('+'),N('+'))+outer(q('-'),N('-')), avg(grad(p)))*dS(Pressure.mesh()) \
                                + alpha/h_avg*inner(outer(q('+'),N('+'))+outer(q('-'),N('-')),outer(p('+'),N('+'))+outer(p('-'),N('-')))*dS(Pressure.mesh()) \
                                - inner(outer(q,N), grad(p))*ds(Pressure.mesh()) \
                                - inner(grad(q), outer(p,N))*ds(Pressure.mesh()) \
                                + gamma/h*inner(q,p)*ds(Pressure.mesh())))
    else:
        L = assemble(mu*(inner(grad(q), grad(p))*dx(Pressure.mesh()))) 
    L = PETSc.Mat().createAIJ(size=L.sparray().shape,csr=(L.sparray().indptr, L.sparray().indices, L.sparray().data))
    print ("{:40}").format("DG scalar Laplacian assemble, time: "), " ==>  ",("{:4f}").format(toc()),  ("{:9}").format("   time: "), ("{:4}").format(time.strftime('%X %x %Z')[0:5])
    tic()
    Q = assemble((1./mu)*inner(p,q)*dx)
    Q = PETSc.Mat().createAIJ(size=Q.sparray().shape,csr=(Q.sparray().indptr, Q.sparray().indices, Q.sparray().data))
    print ("{:40}").format("DG scalar mass matrix assemble, time: "), " ==>  ",("{:4f}").format(toc()),  ("{:9}").format("   time: "), ("{:4}").format(time.strftime('%X %x %Z')[0:5])
    tic()
    kspA, ksp = NSprecondSetup.PCDKSPlinear(Q, L)
    print ("{:40}").format("Linear fluid precond setup, time: "), " ==>  ",("{:4f}").format(toc()),  ("{:9}").format("   time: "), ("{:4}").format(time.strftime('%X %x %Z')[0:5])

    return [kspA,ksp], [L,Q]
Beispiel #2
0
def FluidLinearSetup(Pressure, mu, mesh):
    MO.PrintStr("Preconditioning Fluid linear setup", 3, "=", "\n\n")
    # parameters['linear_algebra_backend'] = 'uBLAS'
    q = TrialFunction(Pressure)
    p = TestFunction(Pressure)

    tic()
    L = assemble(mu * inner(grad(q), grad(p)) * dx,
                 form_compiler_parameters=ffc_options)
    L = CP.Assemble(L)
    print("{:40}").format("CG scalar Laplacian assemble, time: "), " ==>  ", (
        "{:4f}").format(toc()), ("{:9}").format("   time: "), ("{:4}").format(
            time.strftime('%X %x %Z')[0:5])

    tic()
    Q = assemble((1. / mu) * inner(p, q) * dx,
                 form_compiler_parameters=ffc_options)
    Q = CP.Assemble(Q)
    print(
        "{:40}").format("DG scalar mass matrix assemble, time: "), " ==>  ", (
            "{:4f}").format(
                toc()), ("{:9}").format("   time: "), ("{:4}").format(
                    time.strftime('%X %x %Z')[0:5])

    tic()
    kspL, kspQ = NSprecondSetup.PCDKSPlinear(L, Q)
    print("{:40}").format("Linear fluid precond setup, time: "), " ==>  ", (
        "{:4f}").format(toc()), ("{:9}").format("   time: "), ("{:4}").format(
            time.strftime('%X %x %Z')[0:5])

    return [kspL, kspQ], [L, Q]
Beispiel #3
0
def FluidLinearSetup(Pressure,mu,mesh, boundaries, domains):
    MO.PrintStr("Preconditioning Fluid linear setup",3,"=","\n\n")
    # parameters['linear_algebra_backend'] = 'uBLAS'
    q = TrialFunction(Pressure)
    p = TestFunction(Pressure)
    dx = Measure('dx', domain=mesh, subdomain_data=domains)
    ds = Measure('ds', domain=mesh, subdomain_data=boundaries)

    N = FacetNormal(Pressure.mesh())
    h = CellSize(Pressure.mesh())
    h_avg =avg(h)

    alpha = 10.0
    gamma =10.0
    tic()
    if Pressure.__str__().find("CG") == -1:
        L = assemble(mu*(jump(q)*jump(p)*dx(Pressure.mesh())))
    else:
        L = assemble(mu*(inner(grad(q), grad(p))*dx(Pressure.mesh())))# +  inner(grad(q),N)*p*ds(2))
    L = CP.Assemble(L)
    print ("{:40}").format("CG scalar Laplacian assemble, time: "), " ==>  ",("{:4f}").format(toc()),  ("{:9}").format("   time: "), ("{:4}").format(time.strftime('%X %x %Z')[0:5])
    tic()
    Q = assemble((1./mu)*inner(p,q)*dx)
    Q = CP.Assemble(Q)
    print ("{:40}").format("DG scalar mass matrix assemble, time: "), " ==>  ",("{:4f}").format(toc()),  ("{:9}").format("   time: "), ("{:4}").format(time.strftime('%X %x %Z')[0:5])
    tic()
    kspA, ksp = NSprecondSetup.PCDKSPlinear(Q, L)
    print ("{:40}").format("Linear fluid precond setup, time: "), " ==>  ",("{:4f}").format(toc()),  ("{:9}").format("   time: "), ("{:4}").format(time.strftime('%X %x %Z')[0:5])

    return [kspA,ksp], [L,Q]
Beispiel #4
0
        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)

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

        Laplacian = assemble(L)
        Laplacian = CP.Assemble(Laplacian)
        Mass = CP.Assemble(Mass)
        kspA, kspQ = NSprecondSetup.PCDKSPlinear(Mass, Laplacian)

    u_is = PETSc.IS().createGeneral(range(W.sub(0).dim()))
    p_is = PETSc.IS().createGeneral(
        range(W.sub(0).dim(),
              W.sub(0).dim() + W.sub(1).dim()))
    # print L
    SolutionTime = 0
    while eps > tol and iter < maxiter:
        iter += 1
        x = Function(W)

        uu = Function(W)
        tic()
        AA, bb = assemble_system(a, L1 - RHSform, bcs)
        A, b = CP.Assemble(AA, bb)