UpperTriangular arrays in RecursiveArrayTools

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?

That would probably need some work. Open an issue.