@@ -22,11 +22,11 @@ struct RobinBC{T, V<:AbstractVector{T}} <: AffineBC{T}
2222 b_l:: T
2323 a_r:: V
2424 b_r:: T
25- function RobinBC (l:: NTuple{3,T} , r:: NTuple{3,T} , dx:: T , order = 1 ) where {T}
25+ function RobinBC (l:: NTuple{3,T} , r:: NTuple{3,T} , dx:: U , order = 1 ) where {T,U }
2626 αl, βl, γl = l
2727 αr, βr, γr = r
2828
29- s = calculate_weights (1 , one (T ), Array (one (T ): convert (T ,order+ 1 ))) # generate derivative coefficients about the boundary of required approximation order
29+ s = calculate_weights (1 , one (U ), Array (one (U ): convert (U ,order+ 1 ))) # generate derivative coefficients about the boundary of required approximation order
3030
3131 a_l = - s[2 : end ]. / (αl* dx/ βl + s[1 ])
3232 a_r = s[end : - 1 : 2 ]. / (αr* dx/ βr - s[1 ]) # for other boundary stencil is flippedlr with *opposite sign*
@@ -36,14 +36,14 @@ struct RobinBC{T, V<:AbstractVector{T}} <: AffineBC{T}
3636
3737 return new {T, typeof(a_l)} (a_l, b_l, a_r, b_r)
3838 end
39- function RobinBC (l:: Union{NTuple{3,T},AbstractVector{T}} , r:: Union{NTuple{3,T},AbstractVector{T}} , dx:: AbstractVector{T } , order = 1 ) where {T}
39+ function RobinBC (l:: Union{NTuple{3,T},AbstractVector{T}} , r:: Union{NTuple{3,T},AbstractVector{T}} , dx:: AbstractVector{U } , order = 1 ) where {T,U }
4040 αl, βl, γl = l
4141 αr, βr, γr = r
4242
43- s_index = Array (one (T ): convert (T ,order+ 1 ))
43+ s_index = Array (one (U ): convert (U ,order+ 1 ))
4444 dx_l, dx_r = dx[1 : length (s_index)], dx[(end - length (s_index)+ 1 ): end ]
4545
46- s = calculate_weights (1 , one (T ), s_index) # generate derivative coefficients about the boundary of required approximation order
46+ s = calculate_weights (1 , one (U ), s_index) # generate derivative coefficients about the boundary of required approximation order
4747 denom_l = αl+ βl* s[1 ]/ dx_l[1 ]
4848 denom_r = αr- βr* s[1 ]/ dx_r[end ]
4949
@@ -76,24 +76,24 @@ struct GeneralBC{T, L<:AbstractVector{T}, R<:AbstractVector{T}} <:AffineBC{T}
7676 b_l:: T
7777 a_r:: R
7878 b_r:: T
79- function GeneralBC (αl:: AbstractVector{T} , αr:: AbstractVector{T} , dx:: T , order = 1 ) where {T}
79+ function GeneralBC (αl:: AbstractVector{T} , αr:: AbstractVector{T} , dx:: U , order = 1 ) where {T,U }
8080 nl = length (αl)
8181 nr = length (αr)
8282 S_l = zeros (T, (nl- 2 , order+ nl- 2 ))
8383 S_r = zeros (T, (nr- 2 , order+ nr- 2 ))
8484
8585 for i in 1 : (nl- 2 )
86- S_l[i,:] = [transpose (calculate_weights (i, one (T ), Array (one (T ): convert (T , order+ i)))) transpose (zeros (T , Int (nl- 2 - i)))]. / (dx^ i) # am unsure if the length of the dummy_x is correct here
86+ S_l[i,:] = [transpose (calculate_weights (i, one (U ), Array (one (U ): convert (U , order+ i)))) transpose (zeros (U , Int (nl- 2 - i)))]. / (dx^ i) # am unsure if the length of the dummy_x is correct here
8787 end
8888
8989 for i in 1 : (nr- 2 )
90- S_r[i,:] = [transpose (calculate_weights (i, convert (T , order+ i), Array (one (T ): convert (T , order+ i)))) transpose (zeros (T , Int (nr- 2 - i)))]. / (dx^ i)
90+ S_r[i,:] = [transpose (calculate_weights (i, convert (U , order+ i), Array (one (U ): convert (U , order+ i)))) transpose (zeros (U , Int (nr- 2 - i)))]. / (dx^ i)
9191 end
9292 s0_l = S_l[:,1 ] ; Sl = S_l[:,2 : end ]
9393 s0_r = S_r[:,end ] ; Sr = S_r[:,(end - 1 ): - 1 : 1 ]
9494
95- denoml = αl[2 ] .+ αl[3 : end ] ⋅ s0_l
96- denomr = αr[2 ] .+ αr[3 : end ] ⋅ s0_r
95+ denoml = αl[2 ] .+ αl[3 : end ]' ⋅ s0_l
96+ denomr = αr[2 ] .+ αr[3 : end ]' ⋅ s0_r
9797
9898 a_l = - transpose (transpose (αl[3 : end ]) * Sl) ./ denoml
9999 a_r = reverse (- transpose (transpose (αr[3 : end ]) * Sr) ./ denomr)
@@ -103,7 +103,7 @@ struct GeneralBC{T, L<:AbstractVector{T}, R<:AbstractVector{T}} <:AffineBC{T}
103103 new {T, typeof(a_l), typeof(a_r)} (a_l,b_l,a_r,b_r)
104104 end
105105
106- function GeneralBC (αl:: AbstractVector{T} , αr:: AbstractVector{T} , dx:: AbstractVector{T } , order = 1 ) where {T}
106+ function GeneralBC (αl:: AbstractVector{T} , αr:: AbstractVector{T} , dx:: AbstractVector{U } , order = 1 ) where {T,U }
107107
108108 nl = length (αl)
109109 nr = length (αr)
@@ -112,17 +112,17 @@ struct GeneralBC{T, L<:AbstractVector{T}, R<:AbstractVector{T}} <:AffineBC{T}
112112 S_r = zeros (T, (nr- 2 , order+ nr- 2 ))
113113
114114 for i in 1 : (nl- 2 )
115- S_l[i,:] = [transpose (calculate_weights (i, one (T ), Array (one (T ): convert (T , order+ i)))) transpose (zeros (T , Int (nl- 2 - i)))]. / (dx_l.^ i)
115+ S_l[i,:] = [transpose (calculate_weights (i, one (U ), Array (one (U ): convert (U , order+ i)))) transpose (zeros (U , Int (nl- 2 - i)))]. / (dx_l.^ i)
116116 end
117117
118118 for i in 1 : (nr- 2 )
119- S_r[i,:] = [transpose (calculate_weights (i, convert (T , order+ i), Array (one (T ): convert (T , order+ i)))) transpose (zeros (T , Int (nr- 2 - i)))]. / (dx_r.^ i)
119+ S_r[i,:] = [transpose (calculate_weights (i, convert (U , order+ i), Array (one (U ): convert (U , order+ i)))) transpose (zeros (U , Int (nr- 2 - i)))]. / (dx_r.^ i)
120120 end
121121 s0_l = S_l[:,1 ] ; Sl = S_l[:,2 : end ]
122122 s0_r = S_r[:,end ] ; Sr = S_r[:,(end - 1 ): - 1 : 1 ]
123123
124- denoml = αl[2 ] .+ αl[3 : end ] ⋅ s0_l
125- denomr = αr[2 ] .+ αr[3 : end ] ⋅ s0_r
124+ denoml = αl[2 ] .+ αl[3 : end ]' ⋅ s0_l
125+ denomr = αr[2 ] .+ αr[3 : end ]' ⋅ s0_r
126126
127127 a_l = - transpose (transpose (αl[3 : end ]) * Sl) ./ denoml
128128 a_r = reverse (- transpose (transpose (αr[3 : end ]) * Sr) ./ denomr)
@@ -145,7 +145,7 @@ Neumann0BC(dx::Union{AbstractVector{T}, T}, order = 1) where T = NeumannBC((zero
145145# other acceptable argument signatures
146146# RobinBC(al::T, bl::T, cl::T, dx_l::T, ar::T, br::T, cr::T, dx_r::T, order = 1) where T = RobinBC([al,bl, cl], [ar, br, cr], dx_l, order)
147147
148- Base.:* (Q:: AffineBC , u:: AbstractVector ) = BoundaryPaddedVector (Q. a_l ⋅ u[1 : length (Q. a_l)] + Q. b_l, Q. a_r ⋅ u[(end - length (Q. a_r)+ 1 ): end ] + Q. b_r, u)
148+ Base.:* (Q:: AffineBC , u:: AbstractVector ) = BoundaryPaddedVector (Q. a_l' ⋅ u[1 : length (Q. a_l)] + Q. b_l, Q. a_r' ⋅ u[(end - length (Q. a_r)+ 1 ): end ] + Q. b_r, u)
149149Base.:* (Q:: PeriodicBC , u:: AbstractVector ) = BoundaryPaddedVector (u[end ], u[1 ], u)
150150
151151Base. size (Q:: AtomicBC ) = (Inf , Inf ) # Is this nessecary?
0 commit comments