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]
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]
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]
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)