Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

∂u∂n=⨍[G]\uiΓ not work for union domains? Because of "\" no suitable methods? #122

Open
Jiaqi-knight opened this issue May 5, 2019 · 1 comment

Comments

@Jiaqi-knight
Copy link

Jiaqi-knight commented May 5, 2019

@time φ0,∂u∂n=vec([0 ⨍;1 ⨍[G]]\Any[0.,uiΓ])】 works both for single and union domain in the Faraday’s cage example.
However, error occurs with similar code【@time ∂u∂n=⨍[G]\uiΓ】using in example of Helmholtz equation: It is work for single domain such as 【dom = Circle(0.0,1/π)】or 【dom = ChebyshevInterval()】.But, when I change to union domain【dom = Circle(0.0,1/π)∪Segment(-1.0im,1.0)】, it broken.
I tested, and found the bug is that " \ " don't have a methods with union domain. But I don't know how to fix it.

The debug code is following:
julia> @time ∂u∂n=⨍[G]\uiΓ
ERROR: MethodError: no method matching getindex(::PiecewiseSpace{Tuple{ApproxFunBase.SumSpace{Tuple{Hardy{true,Circle{Float64,Float64,Complex{Float64}},Complex{Float64}},Hardy{false,Circle{Float64,Float64,Complex{Float64}},Complex{Float64}}},Circle{Float64,Float64,Complex{Float64}},Complex{Float64}},JacobiWeight{Chebyshev{Segment{Complex{Float64}},Float64},Segment{Complex{Float64}},Float64,Float64}},DomainSets.UnionDomain{Tuple{Circle{Float64,Float64,Complex{Float64}},Segment{Complex{Float64}}},Complex{Float64}},Complex{Float64}}, ::Int64)
Stacktrace:
[1] #CachedOperator#247(::Bool, ::Type, ::ApproxFunBase.InterlaceOperator{Complex{Float64},2,PiecewiseSpace{Tuple{ApproxFunBase.SumSpace{Tuple{Hardy{true,Circle{Float64,Float64,Complex{Float64}},Complex{Float64}},Hardy{false,Circle{Float64,Float64,Complex{Float64}},Complex{Float64}}},Circle{Float64,Float64,Complex{Float64}},Complex{Float64}},JacobiWeight{Chebyshev{Segment{Complex{Float64}},Float64},Segment{Complex{Float64}},Float64,Float64}},DomainSets.UnionDomain{Tuple{Circle{Float64,Float64,Complex{Float64}},Segment{Complex{Float64}}},Complex{Float64}},Complex{Float64}},PiecewiseSpace{Tuple{ApproxFunBase.SumSpace{Tuple{Hardy{true,Circle{Float64,Float64,Complex{Float64}},Complex{Float64}},Hardy{false,Circle{Float64,Float64,Complex{Float64}},Complex{Float64}}},Circle{Float64,Float64,Complex{Float64}},Complex{Float64}},Chebyshev{Segment{Complex{Float64}},Float64}},DomainSets.UnionDomain{Tuple{Circle{Float64,Float64,Complex{Float64}},Segment{Complex{Float64}}},Complex{Float64}},Complex{Float64}},ApproxFunBase.CachedIterator{Tuple{Int64,Int64},ApproxFunBase.BlockInterlacer{Tuple{FillArrays.Fill{Int64,1,Tuple{InfiniteArrays.OneToInf{Int64}}},FillArrays.Ones{Int64,1,Tuple{InfiniteArrays.OneToInf{Int64}}}}}},ApproxFunBase.CachedIterator{Tuple{Int64,Int64},ApproxFunBase.BlockInterlacer{Tuple{FillArrays.Fill{Int64,1,Tuple{InfiniteArrays.OneToInf{Int64}}},FillArrays.Ones{Int64,1,Tuple{InfiniteArrays.OneToInf{Int64}}}}}},Tuple{InfiniteArrays.OrientedInfinity{Bool},InfiniteArrays.Infinity}}) at /home/wjq/.julia/packages/ApproxFunBase/EjdxK/src/Caching/almostbanded.jl:106
[2] Type at ./none:0 [inlined]
[3] #cache#156 at /home/wjq/.julia/packages/ApproxFunBase/EjdxK/src/Operators/general/CachedOperator.jl:55 [inlined]
[4] #cache at ./none:0 [inlined]
[5] #qr#219(::Int64, ::Function, ::ApproxFunBase.InterlaceOperator{Complex{Float64},2,PiecewiseSpace{Tuple{ApproxFunBase.SumSpace{Tuple{Hardy{true,Circle{Float64,Float64,Complex{Float64}},Complex{Float64}},Hardy{false,Circle{Float64,Float64,Complex{Float64}},Complex{Float64}}},Circle{Float64,Float64,Complex{Float64}},Complex{Float64}},JacobiWeight{Chebyshev{Segment{Complex{Float64}},Float64},Segment{Complex{Float64}},Float64,Float64}},DomainSets.UnionDomain{Tuple{Circle{Float64,Float64,Complex{Float64}},Segment{Complex{Float64}}},Complex{Float64}},Complex{Float64}},PiecewiseSpace{Tuple{ApproxFunBase.SumSpace{Tuple{Hardy{true,Circle{Float64,Float64,Complex{Float64}},Complex{Float64}},Hardy{false,Circle{Float64,Float64,Complex{Float64}},Complex{Float64}}},Circle{Float64,Float64,Complex{Float64}},Complex{Float64}},Chebyshev{Segment{Complex{Float64}},Float64}},DomainSets.UnionDomain{Tuple{Circle{Float64,Float64,Complex{Float64}},Segment{Complex{Float64}}},Complex{Float64}},Complex{Float64}},ApproxFunBase.CachedIterator{Tuple{Int64,Int64},ApproxFunBase.BlockInterlacer{Tuple{FillArrays.Fill{Int64,1,Tuple{InfiniteArrays.OneToInf{Int64}}},FillArrays.Ones{Int64,1,Tuple{InfiniteArrays.OneToInf{Int64}}}}}},ApproxFunBase.CachedIterator{Tuple{Int64,Int64},ApproxFunBase.BlockInterlacer{Tuple{FillArrays.Fill{Int64,1,Tuple{InfiniteArrays.OneToInf{Int64}}},FillArrays.Ones{Int64,1,Tuple{InfiniteArrays.OneToInf{Int64}}}}}},Tuple{InfiniteArrays.OrientedInfinity{Bool},InfiniteArrays.Infinity}}) at /home/wjq/.julia/packages/ApproxFunBase/EjdxK/src/Operators/qr.jl:105
[6] qr at /home/wjq/.julia/packages/ApproxFunBase/EjdxK/src/Operators/qr.jl:102 [inlined]
[7] #ldiv_coefficients#131(::Base.Iterators.Pairs{Union{},Union{},Tuple{},NamedTuple{(),Tuple{}}}, ::Function, ::ApproxFunBase.InterlaceOperator{Complex{Float64},2,PiecewiseSpace{Tuple{ApproxFunBase.SumSpace{Tuple{Hardy{true,Circle{Float64,Float64,Complex{Float64}},Complex{Float64}},Hardy{false,Circle{Float64,Float64,Complex{Float64}},Complex{Float64}}},Circle{Float64,Float64,Complex{Float64}},Complex{Float64}},JacobiWeight{Chebyshev{Segment{Complex{Float64}},Float64},Segment{Complex{Float64}},Float64,Float64}},DomainSets.UnionDomain{Tuple{Circle{Float64,Float64,Complex{Float64}},Segment{Complex{Float64}}},Complex{Float64}},Complex{Float64}},PiecewiseSpace{Tuple{ApproxFunBase.SumSpace{Tuple{Hardy{true,Circle{Float64,Float64,Complex{Float64}},Complex{Float64}},Hardy{false,Circle{Float64,Float64,Complex{Float64}},Complex{Float64}}},Circle{Float64,Float64,Complex{Float64}},Complex{Float64}},Chebyshev{Segment{Complex{Float64}},Float64}},DomainSets.UnionDomain{Tuple{Circle{Float64,Float64,Complex{Float64}},Segment{Complex{Float64}}},Complex{Float64}},Complex{Float64}},ApproxFunBase.CachedIterator{Tuple{Int64,Int64},ApproxFunBase.BlockInterlacer{Tuple{FillArrays.Fill{Int64,1,Tuple{InfiniteArrays.OneToInf{Int64}}},FillArrays.Ones{Int64,1,Tuple{InfiniteArrays.OneToInf{Int64}}}}}},ApproxFunBase.CachedIterator{Tuple{Int64,Int64},ApproxFunBase.BlockInterlacer{Tuple{FillArrays.Fill{Int64,1,Tuple{InfiniteArrays.OneToInf{Int64}}},FillArrays.Ones{Int64,1,Tuple{InfiniteArrays.OneToInf{Int64}}}}}},Tuple{InfiniteArrays.OrientedInfinity{Bool},InfiniteArrays.Infinity}}, ::Array{Complex{Float64},1}) at /home/wjq/.julia/packages/ApproxFunBase/EjdxK/src/Operators/ldiv.jl:45
[8] ldiv_coefficients(::ApproxFunBase.InterlaceOperator{Complex{Float64},2,PiecewiseSpace{Tuple{ApproxFunBase.SumSpace{Tuple{Hardy{true,Circle{Float64,Float64,Complex{Float64}},Complex{Float64}},Hardy{false,Circle{Float64,Float64,Complex{Float64}},Complex{Float64}}},Circle{Float64,Float64,Complex{Float64}},Complex{Float64}},JacobiWeight{Chebyshev{Segment{Complex{Float64}},Float64},Segment{Complex{Float64}},Float64,Float64}},DomainSets.UnionDomain{Tuple{Circle{Float64,Float64,Complex{Float64}},Segment{Complex{Float64}}},Complex{Float64}},Complex{Float64}},PiecewiseSpace{Tuple{ApproxFunBase.SumSpace{Tuple{Hardy{true,Circle{Float64,Float64,Complex{Float64}},Complex{Float64}},Hardy{false,Circle{Float64,Float64,Complex{Float64}},Complex{Float64}}},Circle{Float64,Float64,Complex{Float64}},Complex{Float64}},Chebyshev{Segment{Complex{Float64}},Float64}},DomainSets.UnionDomain{Tuple{Circle{Float64,Float64,Complex{Float64}},Segment{Complex{Float64}}},Complex{Float64}},Complex{Float64}},ApproxFunBase.CachedIterator{Tuple{Int64,Int64},ApproxFunBase.BlockInterlacer{Tuple{FillArrays.Fill{Int64,1,Tuple{InfiniteArrays.OneToInf{Int64}}},FillArrays.Ones{Int64,1,Tuple{InfiniteArrays.OneToInf{Int64}}}}}},ApproxFunBase.CachedIterator{Tuple{Int64,Int64},ApproxFunBase.BlockInterlacer{Tuple{FillArrays.Fill{Int64,1,Tuple{InfiniteArrays.OneToInf{Int64}}},FillArrays.Ones{Int64,1,Tuple{InfiniteArrays.OneToInf{Int64}}}}}},Tuple{InfiniteArrays.OrientedInfinity{Bool},InfiniteArrays.Infinity}}, ::Array{Complex{Float64},1}) at /home/wjq/.julia/packages/ApproxFunBase/EjdxK/src/Operators/ldiv.jl:45
[9] ##125(::Base.Iterators.Pairs{Union{},Union{},Tuple{},NamedTuple{(),Tuple{}}}, ::Function, ::ApproxFunBase.InterlaceOperator{Complex{Float64},2,PiecewiseSpace{Tuple{ApproxFunBase.SumSpace{Tuple{Hardy{true,Circle{Float64,Float64,Complex{Float64}},Complex{Float64}},Hardy{false,Circle{Float64,Float64,Complex{Float64}},Complex{Float64}}},Circle{Float64,Float64,Complex{Float64}},Complex{Float64}},JacobiWeight{Chebyshev{Segment{Complex{Float64}},Float64},Segment{Complex{Float64}},Float64,Float64}},DomainSets.UnionDomain{Tuple{Circle{Float64,Float64,Complex{Float64}},Segment{Complex{Float64}}},Complex{Float64}},Complex{Float64}},PiecewiseSpace{Tuple{ApproxFunBase.SumSpace{Tuple{Hardy{true,Circle{Float64,Float64,Complex{Float64}},Complex{Float64}},Hardy{false,Circle{Float64,Float64,Complex{Float64}},Complex{Float64}}},Circle{Float64,Float64,Complex{Float64}},Complex{Float64}},Chebyshev{Segment{Complex{Float64}},Float64}},DomainSets.UnionDomain{Tuple{Circle{Float64,Float64,Complex{Float64}},Segment{Complex{Float64}}},Complex{Float64}},Complex{Float64}},ApproxFunBase.CachedIterator{Tuple{Int64,Int64},ApproxFunBase.BlockInterlacer{Tuple{FillArrays.Fill{Int64,1,Tuple{InfiniteArrays.OneToInf{Int64}}},FillArrays.Ones{Int64,1,Tuple{InfiniteArrays.OneToInf{Int64}}}}}},ApproxFunBase.CachedIterator{Tuple{Int64,Int64},ApproxFunBase.BlockInterlacer{Tuple{FillArrays.Fill{Int64,1,Tuple{InfiniteArrays.OneToInf{Int64}}},FillArrays.Ones{Int64,1,Tuple{InfiniteArrays.OneToInf{Int64}}}}}},Tuple{InfiniteArrays.OrientedInfinity{Bool},InfiniteArrays.Infinity}}, ::Fun{PiecewiseSpace{Tuple{ApproxFunBase.SumSpace{Tuple{Hardy{true,Circle{Float64,Float64,Complex{Float64}},Complex{Float64}},Hardy{false,Circle{Float64,Float64,Complex{Float64}},Complex{Float64}}},Circle{Float64,Float64,Complex{Float64}},Complex{Float64}},Chebyshev{Segment{Complex{Float64}},Float64}},DomainSets.UnionDomain{Tuple{Circle{Float64,Float64,Complex{Float64}},Segment{Complex{Float64}}},Complex{Float64}},Complex{Float64}},Complex{Float64},Array{Complex{Float64},1}}) at /home/wjq/.julia/packages/ApproxFunBase/EjdxK/src/Operators/ldiv.jl:11
[10] (::ApproxFunBase.InterlaceOperator{Complex{Float64},2,PiecewiseSpace{Tuple{ApproxFunBase.SumSpace{Tuple{Hardy{true,Circle{Float64,Float64,Complex{Float64}},Complex{Float64}},Hardy{false,Circle{Float64,Float64,Complex{Float64}},Complex{Float64}}},Circle{Float64,Float64,Complex{Float64}},Complex{Float64}},JacobiWeight{Chebyshev{Segment{Complex{Float64}},Float64},Segment{Complex{Float64}},Float64,Float64}},DomainSets.UnionDomain{Tuple{Circle{Float64,Float64,Complex{Float64}},Segment{Complex{Float64}}},Complex{Float64}},Complex{Float64}},PiecewiseSpace{Tuple{ApproxFunBase.SumSpace{Tuple{Hardy{true,Circle{Float64,Float64,Complex{Float64}},Complex{Float64}},Hardy{false,Circle{Float64,Float64,Complex{Float64}},Complex{Float64}}},Circle{Float64,Float64,Complex{Float64}},Complex{Float64}},Chebyshev{Segment{Complex{Float64}},Float64}},DomainSets.UnionDomain{Tuple{Circle{Float64,Float64,Complex{Float64}},Segment{Complex{Float64}}},Complex{Float64}},Complex{Float64}},ApproxFunBase.CachedIterator{Tuple{Int64,Int64},ApproxFunBase.BlockInterlacer{Tuple{FillArrays.Fill{Int64,1,Tuple{InfiniteArrays.OneToInf{Int64}}},FillArrays.Ones{Int64,1,Tuple{InfiniteArrays.OneToInf{Int64}}}}}},ApproxFunBase.CachedIterator{Tuple{Int64,Int64},ApproxFunBase.BlockInterlacer{Tuple{FillArrays.Fill{Int64,1,Tuple{InfiniteArrays.OneToInf{Int64}}},FillArrays.Ones{Int64,1,Tuple{InfiniteArrays.OneToInf{Int64}}}}}},Tuple{InfiniteArrays.OrientedInfinity{Bool},InfiniteArrays.Infinity}}, ::Fun{PiecewiseSpace{Tuple{ApproxFunBase.SumSpace{Tuple{Hardy{true,Circle{Float64,Float64,Complex{Float64}},Complex{Float64}},Hardy{false,Circle{Float64,Float64,Complex{Float64}},Complex{Float64}}},Circle{Float64,Float64,Complex{Float64}},Complex{Float64}},Chebyshev{Segment{Complex{Float64}},Float64}},DomainSets.UnionDomain{Tuple{Circle{Float64,Float64,Complex{Float64}},Segment{Complex{Float64}}},Complex{Float64}},Complex{Float64}},Complex{Float64},Array{Complex{Float64},1}}) at /home/wjq/.julia/packages/ApproxFunBase/EjdxK/src/Operators/ldiv.jl:4
[11] top-level scope at util.jl:156

@MikaelSlevinsky
Copy link
Member

Yes I remember a time when this used to work

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants