/
test_323.py
58 lines (30 loc) · 982 Bytes
/
test_323.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
from dolfin import *
mesh = UnitSquareMesh(6,4)
ele = FiniteElement("CG", mesh.ufl_cell(), 1)
V = FunctionSpace(mesh, MixedElement([ele,ele]))
u, v = TrialFunction(V), TestFunction(V)
u_r, u_i = split(u)
v_r, v_i = split(v)
f_r = Constant(0.)
f_i = Constant(0.)
def u0_boundary(x, on_boundary):
return on_boundary
bc = DirichletBC(V, Constant((0,0)), u0_boundary)
a_r = inner(grad(u_r),grad(v_r)) * dx - inner(grad(u_i),grad(v_i)) * dx
a_i = inner(grad(u_r),grad(v_i)) * dx + inner(grad(u_i),grad(v_r)) * dx
L_r = inner(f_r,v_r) * dx - inner(f_i,v_i) * dx
L_i = inner(f_r, v_i) * dx + inner(f_i,v_r) * dx
a = a_r+a_i
L = L_r+L_i
A = assemble(a)
b = assemble(L)
bc.apply(A,b)
ps_r = PointSource(V, Point(.5,.5))
#ps_i = PointSource(V.sub(1), Point(.5,.5))
# ps_i.apply(b)
ps_r.apply(b)
print b.array() # inspect ps has been applied
u = Function(V)
solve(A, u.vector(), b, 'lu')
u_r, u_i = u.split(True)
plot(u_i, title='imag');plot(u_r);interactive()