fenics-tutorial icon indicating copy to clipboard operation
fenics-tutorial copied to clipboard

Update ft01

Open OsbertWang opened this issue 5 years ago • 1 comments

I use FEniCS installed in WSL of Windows 10. The version is 2019.01. Then I update demo files in the tutorial. I change the plot code because WSL cannot use GUI but it can save figure.

"""
FEniCS tutorial demo program: Poisson equation with Dirichlet conditions.
Test problem is chosen to give an exact solution at all nodes of the mesh.

  -Laplace(u) = f    in the unit square
            u = u_D  on the boundary

  u_D = 1 + x^2 + 2y^2
    f = -6
"""

# from __future__ import print_function
from dolfin import *

# Create mesh and define function space
mesh = UnitSquareMesh(8, 8)
V = FunctionSpace(mesh, 'P', 1)

# Define boundary condition
u_D = Expression('1 + x[0]*x[0] + 2*x[1]*x[1]', degree=2)

def boundary(x, on_boundary):
    return on_boundary

bc = DirichletBC(V, u_D, boundary)

# Define variational problem
u = TrialFunction(V)
v = TestFunction(V)
f = Constant(-6.0)
a = dot(grad(u), grad(v))*dx
L = f*v*dx

# Compute solution
u = Function(V)
solve(a == L, u, bc)

# Plot solution and mesh
# plot(u)
# plot(mesh)
import matplotlib.pyplot as plt
plot(mesh)
plt.savefig('mesh.pdf')
plt.cla()
plot(u)
plt.savefig('u.pdf')
plt.cla()

# Save solution to file in VTK format
vtkfile = File('poisson/solution.pvd')
vtkfile << u

# Compute error in L2 norm
error_L2 = errornorm(u_D, u, 'L2')

# Compute maximum error at vertices
vertex_values_u_D = u_D.compute_vertex_values(mesh)
vertex_values_u = u.compute_vertex_values(mesh)
import numpy as np
error_max = np.max(np.abs(vertex_values_u_D - vertex_values_u))

# Print errors
print('error_L2  =', error_L2)
print('error_max =', error_max)

# Hold plot
# interactive()

OsbertWang avatar Oct 11 '19 01:10 OsbertWang

I would add plt.switch_backend('agg') just after importing matplotlib to ensure it uses the non-interactive backend. Useful reference in the docs can be found here

adityakavalur avatar Jan 19 '23 00:01 adityakavalur