@@ -46,7 +46,12 @@ function build_function(rhss, vs, ps = (), args = (), conv = simplified_expr, ex
46
46
fname = gensym (:ModelingToolkitFunction )
47
47
48
48
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
+
50
55
ip_let_expr = Expr (:let , var_eqs, build_expr (:block , ip_sys_exprs))
51
56
52
57
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
56
61
elseif typeof (rhss) <: Array && ! (typeof (rhss) <: Vector )
57
62
vector_form = build_expr (:vect , [conv (rhs) for rhs ∈ rhss])
58
63
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))
59
67
else # Vector
60
68
arr_sys_expr = build_expr (:vect , [conv (rhs) for rhs ∈ rhss])
61
69
end
0 commit comments