Hello,
I had installed version 2019.1.0 of FEniCS in Ubuntu using the following command at the terminal.
sudo apt-get install software-properties-common
sudo add-apt-repository ppa:fenics-packages/fenics
sudo apt-get update
sudo apt-get install --no-install-recommends fenics
There are some problems while running the demo codes.
# Compute error at vertices u_e = interpolate(u_D, V) error = np.abs(u_e.vector().array() - u.vector().array()).max() print('t = %.2f: error = %.3g' % (t, error))
The error message is as follows:
Solving linear variational problem.
Traceback (most recent call last):
File “error_test.py”, line 107, in
error = np.abs(u_e.vector().array() - u.vector().array()).max()
AttributeError: ‘dolfin.cpp.la.PETScVector’ object has no attribute ‘array’
This may seem tedious, but just in case, the full code is as follows:
from __future__ import print_function from fenics import * import numpy as np T = 2.0 # final time num_steps = 10 # number of time steps dt = T / num_steps # time step size alpha = 3 # parameter alpha beta = 1.2 # parameter beta # Create mesh and define function space nx = ny = 8 mesh = UnitSquareMesh(nx, ny) V = FunctionSpace(mesh, 'P', 1) # Define boundary condition u_D = Expression('1 + x[0]*x[0] + alpha*x[1]*x[1] + beta*t', degree=2, alpha=alpha, beta=beta, t=0) def boundary(x, on_boundary): return on_boundary bc = DirichletBC(V, u_D, boundary) # Define initial value u_n = interpolate(u_D, V) #u_n = project(u_D, V) # Define variational problem u = TrialFunction(V) v = TestFunction(V) f = Constant(beta - 2 - 2*alpha) F = u*v*dx + dt*dot(grad(u), grad(v))*dx - (u_n + dt*f)*v*dx a, L = lhs(F), rhs(F) # Time-stepping u = Function(V) t = 0 for n in range(num_steps): # Update current time t += dt u_D.t = t # Compute solution solve(a == L, u, bc) # Plot solution plot(u) # Compute error at vertices u_e = interpolate(u_D, V) error = np.abs(u_e.vector().array() - u.vector().array()).max() print('t = %.2f: error = %.3g' % (t, error)) # Update previous solution u_n.assign(u) # Hold plot interactive()