# Set matrix operator solver.setOperators(A) # Compute solution solver.setMonitor(lambda ksp, its, rnorm: print( "Iteration: {}, rel. residual: {}".format(its, rnorm))) solver.solve(b, u.vector) solver.view() # Save solution to XDMF format file = XDMFFile(MPI.comm_world, "elasticity.xdmf") file.write(u) unorm = u.vector.norm() if MPI.rank(mesh.mpi_comm()) == 0: print("Solution vector norm:", unorm) # Save colored mesh partitions in VTK format if running in parallel # if MPI.size(mesh.mpi_comm()) > 1: # File("partitions.pvd") << MeshFunction("size_t", mesh, mesh.topology.dim, \ # MPI.rank(mesh.mpi_comm())) # Project and write stress field to post-processing file # W = TensorFunctionSpace(mesh, "Discontinuous Lagrange", 0) # stress = project(sigma(u), V=W) # File("stress.pvd") << stress # Plot solution # import matplotlib.pyplot as plt # import dolfin.plotting
" 0.", ) u_exact = Expression(U_exact, degree=7, U=float(1.0), nu=float(nu), mode=mode) f = Constant((0.0, 0.0, 0.0)) # Create mesh xmin, ymin, zmin = geometry["xmin"], geometry["ymin"], geometry["zmin"] xmax, ymax, zmax = geometry["xmax"], geometry["ymax"], geometry["zmax"] mesh = BoxMesh(MPI.comm_world, Point(xmin, ymin, zmin), Point(xmax, ymax, zmax), nx, ny, nz) pbc = PeriodicBoundary(geometry) # xdmf output xdmf_u = XDMFFile(mesh.mpi_comm(), outdir_base + "u.xdmf") xdmf_p = XDMFFile(mesh.mpi_comm(), outdir_base + "p.xdmf") xdmf_curl = XDMFFile(mesh.mpi_comm(), outdir_base + "curl.xdmf") # Required elements W_E_2 = VectorElement("DG", mesh.ufl_cell(), k) T_E_2 = VectorElement("DG", mesh.ufl_cell(), 0) Wbar_E_2 = VectorElement("DGT", mesh.ufl_cell(), kbar) Wbar_E_2_H12 = VectorElement("CG", mesh.ufl_cell(), kbar)["facet"] Q_E = FiniteElement("DG", mesh.ufl_cell(), k - 1) Qbar_E = FiniteElement("DGT", mesh.ufl_cell(), k) # Function spaces for projection W_2 = FunctionSpace(mesh, W_E_2) T_2 = FunctionSpace(mesh, T_E_2)