ModelingToolkit: Different ways to access array of variables


Let’s consider a general function that aims at being a reusable pin/connector of arrays of variables.

using ModelingToolkit

function arrayConnection(;name, discretizations = 4)

	@parameters t
	@variables x[1:discretizations](t)

	ODESystem(Equation[], t, x, []; name=name)


Define two instances of this general connection:

@named connection1 = arrayConnection()
@named connection2 = arrayConnection()

Because of the issue mentioned in Access to vector of variables · Issue #908 · SciML/ModelingToolkit.jl · GitHub, it is not possible to access the variables directly with their name. One needs to use either unicode variables or states. However, the output is different. For instance,

eqs1 = [connection1.states[1] ~ connection2.states[1]]

leads to:

1-element Array{Equation,1}:
 x₁(t) ~ x₁(t)

which is a trivial solution, while:

eqs2 = [connection1.x₁ ~ connection2.x₁]

generates the equality one could expect:

1-element Array{Equation,1}:
 connection1₊x₁(t) ~ connection2₊x₁(t)

At this point, I have two questions:

  1. I guess the answer is yes, but just to confirm. Are these two equations actually different within ModelingToolkit, i.e. eqs1 != eqs2?

  2. Assume one wants a general function to connect two, or more, of these connections, e.g.:

function connect(ps...)

	discretizations = Int(length(ps[1].states) )

	equations = [
		         [0 ~ sum(p -> p.states[i], ps) for i in 1:discretizations]

	return equations


This code would lead to trivial equalities as those as in eqs1, which do not add any information to the system and do not actually connect both connectors. Is there a way to loop over the unicode variables so the subscript is i and the connections resembles that in eqs2?

yes, one is namespaced while the other isn’t.

Array variables are being overhauled.

This whole issue will go away.

1 Like

I see that these branches are merged now @ChrisRackauckas.

You also mentioned in this link, Sub plus (₊) instead of dot in the dot notation in equations displayed by ModelingToolkit - #4 by zdenek_hurak, that these changed were going to be released ASAP. Are these changes already out?

Is there a way in Julia to get notifications of releases/changes in particular packages?

Yes, the symbolic array changes are already out in the wild.