Hi all,
In the (otherwise absolutely wonderful) RecursiveArrayTools package, I’m fairly sure it must be possible to use UpperTriangular or LowerTriangular arrays as parts of an ArrayPartition. The source code (RecursiveArrayTools.jl/src/array_partition.jl at master · SciML/RecursiveArrayTools.jl · GitHub) explicitly implements the right ldiv for them. However, I haven’t gotten it to work. Here is a MWE:
using DifferentialEquations
using RecursiveArrayTools
using LinearAlgebra
function f!(du, u, p, t)
v=u.x[1] #vector
A=u.x[2] #UpperTriangular array
du.x[1] .= A*v
du.x[2] .= -A
end
N=3
u0=ArrayPartition(rand(N), UpperTriangular(rand(N, N)))
prob=ODEProblem(f!, u0, (0.0, 10.0), [])
sol=solve(prob)
This returns the error message
conflicting broadcast rules defined
Broadcast.BroadcastStyle(::RecursiveArrayTools.ArrayPartitionStyle{LinearAlgebra.StructuredMatrixStyle{LinearAlgebra.UpperTriangular}}, ::RecursiveArrayTools.ArrayPartitionStyle{Base.Broadcast.DefaultArrayStyle{2}}) = RecursiveArrayTools.ArrayPartitionStyle{LinearAlgebra.StructuredMatrixStyle{LinearAlgebra.UpperTriangular}}()
Broadcast.BroadcastStyle(::RecursiveArrayTools.ArrayPartitionStyle{Base.Broadcast.DefaultArrayStyle{2}}, ::RecursiveArrayTools.ArrayPartitionStyle{LinearAlgebra.StructuredMatrixStyle{LinearAlgebra.UpperTriangular}}) = RecursiveArrayTools.ArrayPartitionStyle{Base.Broadcast.Unknown}()
One of these should be undefined (and thus return Broadcast.Unknown).
Does anyone know how I can fix this?