Ask Your Question

ada's profile - activity

2018-11-29 10:49:13 +0100 asked a question How to use the divergence of a finite function as the source term of another problem

I use RT element to solve problem A and denote the finite element solution by sigma, sigma is a matrix-valued finite element function. I need to use the divergence of sigma to be the source term of another problem, the trial function space is vector-valued functions. But it doesn't work. The code is

from __future__ import print_function
from fenics import *
import matplotlib.pyplot as plt

mesh = UnitSquareMesh(8,8)
RT = VectorElement("RT",mesh.ufl_cell(), 1,2)
Q = FunctionSpace(mesh, RT)
V = VectorFunctionSpace(mesh, 'CG',1)

f = Expression((('x[0]*x[1]','x[0]'),('x[0]','x[0]*x[1]')),degree=2)

sigma = TrialFunction(Q)
tau = TestFunction(Q)
a = inner(sigma, tau)*dx 
L = inner(f,tau)*dx

sigma = Function(Q)
solve(a == L, sigma)

def boundary(x, on_boundary):
    return on_boundary
bc = DirichletBC(V, Constant((0.0, 0.0)), boundary)

u = TrialFunction(V)
v = TestFunction(V)
au = inner(grad(u), grad(v))*dx
Lu = inner(sigma,grad(v))*dx

u = Function(V)
solve(au == Lu, u, bc)