# Method of Lines Interface index error

**URL:** <https://discourse.julialang.org/t/method-of-lines-interface-index-error/104402>\
**Category:** Modelling & Simulations\
**Tags:** question, discretization, modelingtoolkit, differentialequation, methodoflines\
**Created:** [September 29, 2023, 4:24pm UTC](https://discourse.julialang.org/t/method-of-lines-interface-index-error/104402 "2023-09-29T16:24:31Z")\
**Posts on this page:** 2\
**Page:** 1

<div class="post-metadata">

**Author:** ![Can\_Bozdogan](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/can_bozdogan/32/204255_2.png) [@Can\_Bozdogan](https://discourse.julialang.org/u/Can_Bozdogan)\
**Post date:** [September 29, 2023, 4:24pm UTC](https://discourse.julialang.org/t/method-of-lines-interface-index-error/104402/1 "2023-09-29T16:24:31Z")

</div>

Hi everyone,

I’m new to Julia language, this is my first time asking a question, so please forgive me if there is any mistake in my question format.

I have been working on discretizing a PDE system by using MethodOfLines.jl. I have two different spatial domains. The thing is I want to discretize the `z` domain by 50 points and `z_sub` domain by 5 points. When I attempt to discretize the `z_sub` domain to just 5 points, I encounter an index error, specifically `ERROR: BoundsError: attempt to access 5-element Vector{SymbolicUtils.BasicSymbolic{Real}} at index [50]` .

I’ve set up a system of PDEs with the following domains:

```julia
t_min = z_min = 0.0
z_max = p.film_thickness 
t_max = 30.0
z_sub_min = p.film_thickness 
z_sub_max = p.film_thickness + p.thickness_substrate 

```

The discretization that causes the error is:  
`discretization = MOLFiniteDifference([z=>50,z_sub=>5],t,approx_order=2)`

The boundary conditions for the system include:

```julia
bcs = [
    ...
    T(t,z_max) ~ T_sub(t,z_sub_min),
    p.κ*Dz(T(t,z_max)) ~ p.κ_sub*Dz_sub(T_sub(t,z_sub_min)),
    ...
]

@named pdesys = PDESystem(eq,bcs,domains,[z,z_sub,t],[I(t,z),Id(t,z),λ_0(t,z),Vm(t,z),Z(t,z),Is(t,z),T(t,z),T_sub(t,z_sub)])

discretization = MOLFiniteDifference([z=>50,z_sub=>55],t,approx_order=2)

```

Interestingly, when I define the number of discretization points of the `z_sub` domain \>50 (more than `z` domain points), I have not received any error. Is there a way to work around this? Because I want to discretize my `z_sub` domain by 5 points and `z` to 50.

Full error traceback:

```julia
julia> discretization = MOLFiniteDifference([z=>50,z_sub=>5],t,approx_order=2)
MOLFiniteDifference{MethodOfLines.CenterAlignedGrid, MethodOfLines.ScalarizedDiscretization}(Dict{Num, Int64}(z_sub => 5, z => 50), t, 2, UpwindScheme(1), MethodOfLines.CenterAlignedGrid(), true, false, MethodOfLines.ScalarizedDiscretization(), true, Base.Pairs{Symbol, Union{}, Tuple{}, NamedTuple{(), Tuple{}}}())

julia> @time prob_two = discretize(pdesys,discretization)
┌ Warning: The system contains interface boundaries, which are not compatible with system transformation. The system will not be transformed. Please post an issue if you need this feature.
└ @ MethodOfLines C:\Users\bozdoc\.julia\packages\MethodOfLines\uGynQ\src\system_parsing\pde_system_transformation.jl:39
ERROR: BoundsError: attempt to access 5-element Vector{SymbolicUtils.BasicSymbolic{Real}} at index [50]
Stacktrace:
  [1] getindex
    @ .\essentials.jl:13 [inlined]
  [2] getindex(::Vector{SymbolicUtils.BasicSymbolic{Real}}, ::CartesianIndex{1})
    @ Base .\multidimensional.jl:668
  [3] (::MethodOfLines.var"#38#39"{MethodOfLines.DiscreteSpace{2, 8, MethodOfLines.CenterAlignedGrid}, CartesianIndex{1}, Dict{SymbolicUtils.BasicSymbolic{Real}, Int64}})(u::SymbolicUtils.BasicSymbolic{Real})
    @ MethodOfLines .\none:0
  [4] iterate
    @ .\generator.jl:47 [inlined]
  [5] collect_to!(dest::Vector{Pair{SymbolicUtils.BasicSymbolic{Real}, SymbolicUtils.BasicSymbolic{Real}}}, itr::Base.Generator{Vector{SymbolicUtils.BasicSymbolic{Real}}, MethodOfLines.var"#38#39"{MethodOfLines.DiscreteSpace{2, 8, MethodOfLines.CenterAlignedGrid}, CartesianIndex{1}, Dict{SymbolicUtils.BasicSymbolic{Real}, Int64}}}, offs::Int64, st::Int64)
    @ Base .\array.jl:840
  [6] collect_to_with_first!(dest::Vector{Pair{SymbolicUtils.BasicSymbolic{Real}, SymbolicUtils.BasicSymbolic{Real}}}, v1::Pair{SymbolicUtils.BasicSymbolic{Real}, SymbolicUtils.BasicSymbolic{Real}}, itr::Base.Generator{Vector{SymbolicUtils.BasicSymbolic{Real}}, MethodOfLines.var"#38#39"{MethodOfLines.DiscreteSpace{2, 8, MethodOfLines.CenterAlignedGrid}, CartesianIndex{1}, Dict{SymbolicUtils.BasicSymbolic{Real}, Int64}}}, st::Int64)
    @ Base .\array.jl:818
  [7] collect(itr::Base.Generator{Vector{SymbolicUtils.BasicSymbolic{Real}}, MethodOfLines.var"#38#39"{MethodOfLines.DiscreteSpace{2, 8, MethodOfLines.CenterAlignedGrid}, CartesianIndex{1}, Dict{SymbolicUtils.BasicSymbolic{Real}, Int64}}})
    @ Base .\array.jl:792
  [8] varmaps(s::MethodOfLines.DiscreteSpace{2, 8, MethodOfLines.CenterAlignedGrid}, depvars::Vector{SymbolicUtils.BasicSymbolic{Real}}, II::CartesianIndex{1}, indexmap::Dict{SymbolicUtils.BasicSymbolic{Real}, Int64})
    @ MethodOfLines C:\Users\bozdoc\.julia\packages\MethodOfLines\uGynQ\src\discretization\discretize_vars.jl:220
  [9] (::MethodOfLines.var"#440#442"{MethodOfLines.DiscreteSpace{2, 8, MethodOfLines.CenterAlignedGrid}, Vector{Any}, PDEBase.HigherOrderInterfaceBoundary, Dict{SymbolicUtils.BasicSymbolic{Real}, Int64}, Equation})(II::CartesianIndex{1})
    @ MethodOfLines C:\Users\bozdoc\.julia\packages\MethodOfLines\uGynQ\src\discretization\generate_bc_eqs.jl:175
 [10] iterate
    @ .\generator.jl:47 [inlined]
 [11] _collect(c::Vector{CartesianIndex{1}}, itr::Base.Generator{Vector{CartesianIndex{1}}, MethodOfLines.var"#440#442"{MethodOfLines.DiscreteSpace{2, 8, MethodOfLines.CenterAlignedGrid}, Vector{Any}, PDEBase.HigherOrderInterfaceBoundary, Dict{SymbolicUtils.BasicSymbolic{Real}, Int64}, Equation}}, #unused#::Base.EltypeUnknown, isz::Base.HasShape{1})
    @ Base .\array.jl:802
 [12] collect_similar(cont::Vector{CartesianIndex{1}}, itr::Base.Generator{Vector{CartesianIndex{1}}, MethodOfLines.var"#440#442"{MethodOfLines.DiscreteSpace{2, 8, MethodOfLines.CenterAlignedGrid}, Vector{Any}, PDEBase.HigherOrderInterfaceBoundary, Dict{SymbolicUtils.BasicSymbolic{Real}, Int64}, Equation}})
    @ Base .\array.jl:711
 [13] map(f::Function, A::Vector{CartesianIndex{1}})
    @ Base .\abstractarray.jl:3263
 [14] generate_bc_eqs(s::MethodOfLines.DiscreteSpace{2, 8, MethodOfLines.CenterAlignedGrid}, boundaryvalfuncs::Vector{Any}, boundary::PDEBase.HigherOrderInterfaceBoundary, interiormap::MethodOfLines.InteriorMap, indexmap::Dict{SymbolicUtils.BasicSymbolic{Real}, Int64})
    @ MethodOfLines C:\Users\bozdoc\.julia\packages\MethodOfLines\uGynQ\src\discretization\generate_bc_eqs.jl:173
 [15] generate_bc_eqs!(disc_state::PDEBase.EquationState, s::MethodOfLines.DiscreteSpace{2, 8, MethodOfLines.CenterAlignedGrid}, boundaryvalfuncs::Vector{Any}, interiormap::MethodOfLines.InteriorMap, boundary::PDEBase.HigherOrderInterfaceBoundary)
    @ MethodOfLines C:\Users\bozdoc\.julia\packages\MethodOfLines\uGynQ\src\discretization\generate_bc_eqs.jl:27
 [16] discretize_equation!(disc_state::PDEBase.EquationState, pde::Equation, interiormap::MethodOfLines.InteriorMap, eqvar::SymbolicUtils.BasicSymbolic{Real}, bcmap::Dict{SymbolicUtils.BasicSymbolic{SymbolicUtils.FnType{Tuple, Real}}, Dict{SymbolicUtils.BasicSymbolic{Real}, Vector{Any}}}, depvars::Vector{Any}, s::MethodOfLines.DiscreteSpace{2, 8, MethodOfLines.CenterAlignedGrid}, derivweights::MethodOfLines.DifferentialDiscretizer{Pair{SymbolicUtils.BasicSymbolic{Real}, Vector{Int64}}, Dict{Function, MethodOfLines.DerivativeOperator{Float64, Nothing, false, Float64, StaticArraysCore.SVector{3, Float64}, S2, S3, Nothing, Nothing} where {S2, S3}}, UpwindScheme}, indexmap::Dict{SymbolicUtils.BasicSymbolic{Real}, Int64}, discretization::MOLFiniteDifference{MethodOfLines.CenterAlignedGrid, MethodOfLines.ScalarizedDiscretization})
    @ MethodOfLines C:\Users\bozdoc\.julia\packages\MethodOfLines\uGynQ\src\scalar_discretization.jl:9
 [17] symbolic_discretize(pdesys::PDESystem, discretization::MOLFiniteDifference{MethodOfLines.CenterAlignedGrid, MethodOfLines.ScalarizedDiscretization})
    @ PDEBase C:\Users\bozdoc\.julia\packages\PDEBase\2OwkC\src\symbolic_discretize.jl:79
 [18] discretize(pdesys::PDESystem, discretization::MOLFiniteDifference{MethodOfLines.CenterAlignedGrid, MethodOfLines.ScalarizedDiscretization}; analytic::Nothing, kwargs::Base.Pairs{Symbol, Union{}, Tuple{}, NamedTuple{(), Tuple{}}})
    @ PDEBase C:\Users\bozdoc\.julia\packages\PDEBase\2OwkC\src\discretization_state.jl:58
 [19] discretize(pdesys::PDESystem, discretization::MOLFiniteDifference{MethodOfLines.CenterAlignedGrid, MethodOfLines.ScalarizedDiscretization})       
    @ PDEBase C:\Users\bozdoc\.julia\packages\PDEBase\2OwkC\src\discretization_state.jl:55
 [20] top-level scope
    @ .\timing.jl:273 [inlined]
 [21] top-level scope
    @ .\REPL[66]:0

```

---

<div class="post-metadata">

**Author:** ![xtalax](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/xtalax/32/35293_2.png) [@xtalax](https://discourse.julialang.org/u/xtalax)\
**Post date:** [October 3, 2023, 1:01pm UTC](https://discourse.julialang.org/t/method-of-lines-interface-index-error/104402/2 "2023-10-03T13:01:36Z")

</div>

Can you post the full code, or dm me if it is sensitive?
