Skip to content

Commit 32085f7

Browse files
committed
allow reversed boundary pieces
1 parent e68ef94 commit 32085f7

File tree

2 files changed

+40
-20
lines changed

2 files changed

+40
-20
lines changed

src/DirichletTriangle.jl

Lines changed: 39 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -522,66 +522,86 @@ end
522522
## Restriction Operators
523523

524524
function Conversion(a::DirichletTriangle{1,0,0}, b::Jacobi)
525-
@assert b == Legendre(Segment(domain(a).a , domain(a).c))
526-
ConcreteConversion(a,b)
525+
S = Legendre(Segment(domain(a).a , domain(a).c))
526+
if b == S
527+
ConcreteConversion(a,b)
528+
else
529+
Conversion(a, S, b)
530+
end
527531
end
528532

529533
function Conversion(a::DirichletTriangle{0,1,0}, b::Jacobi)
530-
@assert b == Legendre(Segment(domain(a).a , domain(a).b))
531-
ConcreteConversion(a,b)
534+
S = Legendre(Segment(domain(a).a , domain(a).b))
535+
if b == S
536+
ConcreteConversion(a,b)
537+
else
538+
Conversion(a, S, b)
539+
end
532540
end
533541

534542
function Conversion(a::DirichletTriangle{0,0,1}, b::Jacobi)
535-
@assert b == Legendre(Segment(domain(a).c , domain(a).b))
536-
ConcreteConversion(a,b)
543+
S = Legendre(Segment(domain(a).c , domain(a).b))
544+
if b == S
545+
ConcreteConversion(a,b)
546+
else
547+
Conversion(a, S, b)
548+
end
537549
end
538550

539551

540552
function Conversion(a::DirichletTriangle{1,1,0}, b::Jacobi)
541553
d = domain(a)
542-
if b == Legendre(Segment(d.a , d.c))
554+
d_b = domain(b)
555+
d_bR = reverseorientation(d_b)
556+
if d_b == Segment(d.a , d.c) || d_bR == Segment(d.a , d.c)
543557
Conversion(a, DirichletTriangle{1,0,0}(d), b)
544-
elseif b == Legendre(Segment(d.a , d.b))
558+
elseif d_b == Segment(d.a , d.b) || d_bR == Segment(d.a , d.b)
545559
Conversion(a, DirichletTriangle{0,1,0}(d), b)
546560
else
547-
throw(ArgumentError())
561+
throw(ArgumentError("Cannot create Conversion($a, $b)"))
548562
end
549563
end
550564

551565

552566
function Conversion(a::DirichletTriangle{1,0,1}, b::Jacobi)
553567
d = domain(a)
554-
if b == Legendre(Segment(d.a , d.c))
568+
d_b = domain(b)
569+
d_bR = reverseorientation(d_b)
570+
if d_b == Segment(d.a , d.c) || d_bR == Segment(d.a , d.c)
555571
Conversion(a, DirichletTriangle{1,0,0}(d), b)
556-
elseif b == Legendre(Segment(d.c , d.b))
572+
elseif d_b == Segment(d.c , d.b) || d_bR == Segment(d.c , d.b)
557573
Conversion(a, DirichletTriangle{0,0,1}(d), b)
558574
else
559-
throw(ArgumentError())
575+
throw(ArgumentError("Cannot create Conversion($a, $b)"))
560576
end
561577
end
562578

563579
function Conversion(a::DirichletTriangle{0,1,1}, b::Jacobi)
564580
d = domain(a)
565-
if b == Legendre(Segment(d.a , d.b))
581+
d_b = domain(b)
582+
d_bR = reverseorientation(d_b)
583+
if d_b == Segment(d.a , d.b) || d_bR == Segment(d.a , d.b)
566584
Conversion(a, DirichletTriangle{0,1,0}(d), b)
567-
elseif b == Legendre(Segment(d.c , d.b))
585+
elseif d_b == Segment(d.c , d.b) || d_bR == Segment(d.c , d.b)
568586
Conversion(a, DirichletTriangle{0,0,1}(d), b)
569587
else
570-
throw(ArgumentError())
588+
throw(ArgumentError("Cannot create Conversion($a, $b)"))
571589
end
572590
end
573591

574592

575593
function Conversion(a::DirichletTriangle{1,1,1}, b::Jacobi)
576594
d = domain(a)
577-
if b == Legendre(Segment(d.a , d.c))
595+
d_b = domain(b)
596+
d_bR = reverseorientation(d_b)
597+
if d_b == Segment(d.a , d.c) || d_bR == Segment(d.a , d.c)
578598
Conversion(a, DirichletTriangle{1,0,1}(d), b)
579-
elseif b == Legendre(Segment(d.a , d.b))
599+
elseif d_b == Segment(d.a , d.b) || d_bR == Segment(d.a , d.b)
580600
Conversion(a, DirichletTriangle{0,1,1}(d), b)
581-
elseif b == Legendre(Segment(d.c , d.b))
601+
elseif d_b == Segment(d.c , d.b) || d_bR == Segment(d.c , d.b)
582602
Conversion(a, DirichletTriangle{0,1,1}(d), b)
583603
else
584-
throw(ArgumentError())
604+
throw(ArgumentError("Cannot create Conversion($a, $b)"))
585605
end
586606
end
587607

src/Triangle.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -573,7 +573,7 @@ function Conversion(K1::JacobiTriangle,K2::JacobiTriangle)
573573
isapproxinteger(K1.γ-K2.γ)
574574

575575
if (K1.α==K2.α && K1.β==K2.β && K1.γ==K2.γ)
576-
ConversionWrapper(eye(K1))
576+
ConversionWrapper(Operator(I,K1))
577577
elseif (K1.α+1==K2.α && K1.β==K2.β && K1.γ==K2.γ) ||
578578
(K1.α==K2.α && K1.β+1==K2.β && K1.γ==K2.γ) ||
579579
(K1.α==K2.α && K1.β==K2.β && K1.γ+1==K2.γ)

0 commit comments

Comments
 (0)