|
165 | 165 | JacobiTriangle(a,b+1,c+1) * _BandedBlockBandedMatrix((k .+ convert(T, b+c))', axes(k,1), (-1,1), (-1,1)) |
166 | 166 | end |
167 | 167 |
|
| 168 | +# TODO: The derivatives below only hold for a, b, c > 0. |
| 169 | +@simplify function *(Dx::PartialDerivative{1}, P::WeightedTriangle) |
| 170 | + a, b, c = P.P.a, P.P.b, P.P.c |
| 171 | + n = mortar(Fill.(oneto(∞),oneto(∞))) |
| 172 | + k = mortar(Base.OneTo.(oneto(∞))) |
| 173 | + scale = -(2k .+ (b + c - 1)) |
| 174 | + coeff1 = (k .+ (c - 1)) .* (n .- k .+ 1) ./ scale |
| 175 | + coeff2 = k .* (n .- k .+ a) ./ scale |
| 176 | + dat = BlockBroadcastArray(hcat, coeff1, coeff2) |
| 177 | + WeightedTriangle(a-1, b, c-1) * _BandedBlockBandedMatrix(dat', axes(k, 1), (1, -1), (1, 0)) |
| 178 | +end |
| 179 | + |
| 180 | +@simplify function *(Dy::PartialDerivative{2}, P::WeightedTriangle) |
| 181 | + a, b, c = P.P.a, P.P.b, P.P.c |
| 182 | + k = mortar(Base.OneTo.(oneto(∞))) |
| 183 | + T = promote_type(eltype(Dy), eltype(P)) # avoid bug in convert |
| 184 | + WeightedTriangle(a, b-1, c-1) * _BandedBlockBandedMatrix(-one(T) * k', axes(k, 1), (1, -1), (1, -1)) |
| 185 | +end |
168 | 186 |
|
169 | 187 | # @simplify function *(Δ::Laplacian, P) |
170 | 188 | # _lap_mul(P, eltype(axes(P,1))) |
|
0 commit comments