# Defining an array of MTK variables causes error with ModelingToolkit.discretize()

**URL:** <https://discourse.julialang.org/t/defining-an-array-of-mtk-variables-causes-error-with-modelingtoolkit-discretize/77153>\
**Category:** General Usage\
**Tags:** sciml, modelingtoolkit\
**Created:** [February 27, 2022, 3:15pm UTC](https://discourse.julialang.org/t/defining-an-array-of-mtk-variables-causes-error-with-modelingtoolkit-discretize/77153 "2022-02-27T15:15:24Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![Fathya.Salih](https://avatars.discourse-cdn.com/v4/letter/f/47e85d/32.png) [@Fathya.Salih](https://discourse.julialang.org/u/Fathya.Salih)\
**Post date:** [February 27, 2022, 3:15pm UTC](https://discourse.julialang.org/t/defining-an-array-of-mtk-variables-causes-error-with-modelingtoolkit-discretize/77153/1 "2022-02-27T15:15:24Z")

</div>

I am trying to solve a number of ODEs for a set of variables (`u_1, u_2, ..., u_6`) using `MethodOfLines.jl`, but I get this error

```julia
MethodError: no method matching nameof(::SymbolicUtils.Term{SymbolicUtils.FnType{Tuple, Real}, Nothing})

Closest candidates are:

nameof(!Matched::SymbolicUtils.Sym) at C:\Users\User\.julia\packages\SymbolicUtils\v2ZkM\src\types.jl:144

nameof(!Matched::ModelingToolkit.AbstractSystem) at C:\Users\User\.julia\packages\ModelingToolkit\Uaky4\src\systems\abstractsystem.jl:140

nameof(!Matched::DataType) at C:\Users\User\AppData\Local\Programs\Julia-1.7.0\share\julia\base\reflection.jl:223

...

(::MethodOfLines.var"#12#27"{Nothing})(::SymbolicUtils.Term{Real, Base.ImmutableDict{DataType, Any}})@discretize_vars.jl:43
iterate@generator.jl:47[inlined]
_collect(::Vector{Any}, ::Base.Generator{Vector{Any}, MethodOfLines.var"#12#27"{Nothing}}, ::Base.EltypeUnknown, ::Base.HasShape{1})@array.jl:744
collect_similar(::Vector{Any}, ::Base.Generator{Vector{Any}, MethodOfLines.var"#12#27"{Nothing}})@array.jl:653
map(::Function, ::Vector{Any})@abstractarray.jl:2849
MethodOfLines.DiscreteSpace(::Vector{Symbolics.VarDomainPairing}, ::Vector{Any}, ::Vector{SymbolicUtils.Sym{Real, Base.ImmutableDict{DataType, Any}}}, ::MethodOfLines.MOLFiniteDifference{MethodOfLines.CenterAlignedGrid})@discretize_vars.jl:41
symbolic_discretize(::ModelingToolkit.PDESystem, ::MethodOfLines.MOLFiniteDifference{MethodOfLines.CenterAlignedGrid})@MOL_discretization.jl:37
discretize(::ModelingToolkit.PDESystem, ::MethodOfLines.MOLFiniteDifference{MethodOfLines.CenterAlignedGrid})@MOL_discretization.jl:120
top-level scope@Local: 45[inlined]

```

The error doesn’t show up, if I name the variables individually (`@variables u_1, u_2, ..., u_6`). But I have a lot of functions that need to be iterated over to define the equations and boundary conditions, and that would not be convenient.

Any idea how I can deal with this?

---

<div class="post-metadata">

**Author:** ![ChrisRackauckas](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/chrisrackauckas/32/77_2.png) [@ChrisRackauckas](https://discourse.julialang.org/u/ChrisRackauckas)\
**Post date:** [February 27, 2022, 6:43pm UTC](https://discourse.julialang.org/t/defining-an-array-of-mtk-variables-causes-error-with-modelingtoolkit-discretize/77153/2 "2022-02-27T18:43:33Z")

</div>

What does your code look like?

---

<div class="post-metadata">

**Author:** ![Fathya.Salih](https://avatars.discourse-cdn.com/v4/letter/f/47e85d/32.png) [@Fathya.Salih](https://discourse.julialang.org/u/Fathya.Salih)\
**Post date:** [February 27, 2022, 8:13pm UTC](https://discourse.julialang.org/t/defining-an-array-of-mtk-variables-causes-error-with-modelingtoolkit-discretize/77153/3 "2022-02-27T20:13:28Z")

</div>

Sorry, I thought I had it there. Here it is

```julia
begin
	# Dependencies
	using DiffEqOperators, MethodOfLines, OrdinaryDiffEq, ModelingToolkit, DomainSets, NonlinearSolve

	N = 6 # number of dependent variables
	
	# Variables, parameters, and derivatives
	@parameters x
	@variables u[1:N](..)
	Dx = Differential(x)
	Dxx = Differential(x)^2
	
	# Domain edges
	x_min= 0.
	x_max = 1.

	# Discretization parameters
	dx = 0.1
	order = 2
	
	# Equations
	eqs = Vector{ModelingToolkit.Equation}(undef, N)
	for i = 1:N
		eqs[i] = Dxx(u[i](x)) ~ u[i](x)
	end

	# Initial and boundary conditions
	bcs = Vector{ModelingToolkit.Equation}(undef, 2*N)
	for i = 1:N
		bcs[i] = Dx(u[i](x_min)) ~ 0.
	end	
	
	for i = 1:N
		bcs[i+N] = u[i](x_max) ~ rand()
	end
	
	# Space and time domains
	domains = [x ∈ Interval(x_min, x_max)]
	
	# PDE system
	@named pdesys = PDESystem(eqs, bcs, domains, [x], [u[i](x) for i = 1:N])
	
	# Method of lines discretization
	discretization = MOLFiniteDifference([x=>dx], nothing, approx_order=order)
	prob = ModelingToolkit.discretize(pdesys,discretization)
	
	# # Solution of the ODE system
	sol = NonlinearSolve.solve(prob,NewtonRaphson())
end

```

---

<div class="post-metadata">

**Author:** ![ChrisRackauckas](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/chrisrackauckas/32/77_2.png) [@ChrisRackauckas](https://discourse.julialang.org/u/ChrisRackauckas)\
**Post date:** [February 28, 2022, 3:23am UTC](https://discourse.julialang.org/t/defining-an-array-of-mtk-variables-causes-error-with-modelingtoolkit-discretize/77153/4 "2022-02-28T03:23:11Z")

</div>

Oh I see now. Open an issue on MethodOfLines.jl. This is not related to MTK itself.

---

<div class="post-metadata">

**Author:** ![Fathya.Salih](https://avatars.discourse-cdn.com/v4/letter/f/47e85d/32.png) [@Fathya.Salih](https://discourse.julialang.org/u/Fathya.Salih)\
**Post date:** [February 28, 2022, 8:05am UTC](https://discourse.julialang.org/t/defining-an-array-of-mtk-variables-causes-error-with-modelingtoolkit-discretize/77153/5 "2022-02-28T08:05:04Z")

</div>

Ok. I opened an issue  
[Defining an array of variables causes error with ModelingToolkit.discretize() · Issue #43 · SciML/MethodOfLines.jl (github.com)](https://github.com/SciML/MethodOfLines.jl/issues/43)
