Skip to content

Commit d082484

Browse files
committed
work on L-shaped Laplace
1 parent 3f772d2 commit d082484

File tree

3 files changed

+93
-1
lines changed

3 files changed

+93
-1
lines changed

examples/L-shaped Laplace.jl

Lines changed: 90 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,90 @@
1+
using ApproxFun, MultivariateOrthogonalPolynomials
2+
import ApproxFun: Vec, PiecewiseSegment, ZeroOperator
3+
import MultivariateOrthogonalPolynomials: DirichletTriangle
4+
5+
d = [Triangle(Vec(0,0), Vec(1,0), Vec(0,1)) , Triangle(Vec(1,1),Vec(1,0),Vec(0,1)) ,
6+
Triangle(Vec(1,1),Vec(0,1),Vec(0,2)) , Triangle(Vec(1,2),Vec(0,2),Vec(1,1)) ,
7+
Triangle(Vec(1,0), Vec(2,0), Vec(1,1)) , Triangle(Vec(2,1), Vec(1,1), Vec(2,0))]
8+
9+
∂d = components(PiecewiseSegment([Vec(0,0), Vec(1,0), Vec(2,0), Vec(2,1), Vec(1,1), Vec(1,2), Vec(0,2), Vec(0,1), Vec(0,0)]))
10+
ιd = [Segment(Vec(0,1),Vec(1,0)), Segment(Vec(0,1), Vec(1,1)), Segment(Vec(1,1), Vec(2,0)),
11+
Segment(Vec(1,0), Vec(1,1)), Segment(Vec(0,2), Vec(1,1))]
12+
13+
length(∂d)
14+
15+
ds = vcat(fill.(DirichletTriangle{1,1,1}.(d),3)...) # repeat each triangle 3 times
16+
rs = [Legendre.(∂d); fill.(Legendre.(ιd),2)...; fill.(JacobiTriangle.(d),3)...]
17+
18+
19+
N,M = length(rs), length(ds)
20+
A = Matrix{Operator{Float64}}(undef, N,M)
21+
for K=1:N, J=1:M # fill with zeros
22+
A[K,J] = ZeroOperator(ds[J],rs[K])
23+
end
24+
# add boundary conditions
25+
for K = 1:length(∂d)
26+
for J = 1:length(d)
27+
if
28+
A[K,J] = I : ds[J] rs[K]
29+
end
30+
31+
32+
∂d[1] d[1]
33+
34+
rs[3]
35+
36+
37+
38+
typeof(components(d))
39+
40+
41+
42+
43+
length(ιd)
44+
45+
46+
47+
48+
Vec{2,Float64}
49+
Segment(Vec(0,0), Vec(1.0,0)) |> typeof
50+
51+
52+
53+
import Makie
54+
55+
56+
57+
S = DirichletTriangle{1,1,1}.(components(d))
58+
59+
C1 = I : S[1] Legendre(Segment(Vec(0,0),Vec(1,0)))
60+
C2 = I : S[1] Legendre(Segment(Vec(1,0),Vec(0,0)))
61+
62+
a = Legendre(Segment(Vec(0,0),Vec(1,0)))
63+
b = Legendre(Segment(Vec(1,0),Vec(0,0)))
64+
65+
@which Conversion(a,b)
66+
67+
68+
69+
70+
DirichletTriangle{0,1,1}(d[1])
71+
72+
2
73+
C1.op.op.ops
74+
75+
76+
77+
78+
C2.op.op.ops
79+
80+
C1 == C2
81+
82+
C1[1:20,1:20] == C2[1:20,1:20]
83+
84+
Legendre(Segment(Vec(0,0),Vec(1,0)))
85+
86+
∂d = PiecewiseSegment([Vec(0.,0), Vec(1.,0), Vec(1,1), Vec(1,2), Vec(0,1), Vec(-1,1.5), Vec(0,0)])
87+
88+
o = Fun.(S, Ref([1.0]))
89+
90+
o[1]

src/MultivariateOrthogonalPolynomials.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ using Base, RecipesBase, ApproxFun, BandedMatrices, BlockArrays,
77

88
# package code goes here
99
import Base: values,getindex,setindex!,*, +, -, ==,<,<=,>,
10-
>=,/,^,\,,transpose, in, convert
10+
>=,/,^,\,,transpose, in, convert, issubset
1111

1212

1313
import BandedMatrices: inbands_getindex, inbands_setindex!

src/Triangle.jl

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@ function in(p::Vec{2,Float64}, d::Triangle)
1616
0  x  x + y  1
1717
end
1818

19+
issubset(a::Segment{<:Vec{2}}, b::Triangle) = error("Implement")
20+
1921

2022
for op in (:-, :+)
2123
@eval begin

0 commit comments

Comments
 (0)