@@ -46,7 +46,12 @@ function build_function(rhss, vs, ps = (), args = (), conv = simplified_expr, ex
4646 fname = gensym (:ModelingToolkitFunction )
4747
4848 X = gensym (:MTIIPVar )
49- ip_sys_exprs = [:($ X[$ i] = $ (conv (rhs))) for (i, rhs) ∈ enumerate (rhss)]
49+ if rhss isa SparseMatrixCSC
50+ ip_sys_exprs = [:($ X. nzval[$ i] = $ (conv (rhs))) for (i, rhs) ∈ enumerate (rhss. nzval)]
51+ else
52+ ip_sys_exprs = [:($ X[$ i] = $ (conv (rhs))) for (i, rhs) ∈ enumerate (rhss)]
53+ end
54+
5055 ip_let_expr = Expr (:let , var_eqs, build_expr (:block , ip_sys_exprs))
5156
5257 tuple_sys_expr = build_expr (:tuple , [conv (rhs) for rhs ∈ rhss])
@@ -56,6 +61,9 @@ function build_function(rhss, vs, ps = (), args = (), conv = simplified_expr, ex
5661 elseif typeof (rhss) <: Array && ! (typeof (rhss) <: Vector )
5762 vector_form = build_expr (:vect , [conv (rhs) for rhs ∈ rhss])
5863 arr_sys_expr = :(reshape ($ vector_form,$ (size (rhss)... )))
64+ elseif rhss isa SparseMatrixCSC
65+ vector_form = build_expr (:vect , [conv (rhs) for rhs ∈ nonzeros (rhss)])
66+ arr_sys_expr = :(SparseMatrixCSC {eltype(u),Int} ($ (size (rhss)... ), $ (rhss. colptr), $ (rhss. rowval), $ vector_form))
5967 else # Vector
6068 arr_sys_expr = build_expr (:vect , [conv (rhs) for rhs ∈ rhss])
6169 end
0 commit comments