# Handle differential equations with size varying state vector

Hello,

I am working on time marching of ODEs with size varying state vector. I would like to use the integrator interface of `DifferentialEquations` to do so. Here is a toy problem with the error. `du` is computed based on the initial `u` and not on modified `u`.

``````using DifferentialEquations

function RHS(du,u,p,t)
N = size(u,1)
for i = 1:N
du[i] = -u[i]
end
@show size(du)
end

u0 = [1.0; 1.0; 1.0]
states = [deepcopy(u0)]
tspan = (0.0,1.0)

Δt = 1e-1
T = tspan[1]:Δt:tspan[end]

prob = ODEProblem(RHS,u0,tspan)

integrator = init(prob, RK4(), adaptive =false, dt = Δt, save_everystep=false)
``````

returns

``````
t: 0.0
u: 3-element Array{Float64,1}:
1.0
1.0
1.0
``````

For loop for the time marching

``````for t in T[1:end-1]
set_u!(integrator, append!(deepcopy(states[end]),1.0))
step!(integrator)
push!(states, deepcopy(integrator.u))
end
``````

returns

``````size(du) = (3,)
size(du) = (3,)
size(du) = (3,)

DimensionMismatch("array could not be broadcast to match destination")

DimensionMismatch("array could not be broadcast to match destination")

Stacktrace:
[7] macro expansion at /Users/mathieu/.julia/packages/DiffEqBase/E16PL/src/diffeqfastbc.jl:79 [inlined]
[8] perform_step!(::OrdinaryDiffEq.ODEIntegrator{RK4,true,Array{Float64,1},Float64,DiffEqBase.NullParameters,Float64,Float64,Float64,Array{Array{Float64,1},1},ODESolution{Float64,2,Array{Array{Float64,1},1},Nothing,Nothing,Array{Float64,1},Array{Array{Array{Float64,1},1},1},ODEProblem{Array{Float64,1},Tuple{Float64,Float64},true,DiffEqBase.NullParameters,ODEFunction{true,typeof(RHS),UniformScaling{Bool},Nothing,Nothing,Nothing,Nothing,Nothing,Nothing,Nothing,Nothing,Nothing},Base.Iterators.Pairs{Union{},Union{},Tuple{},NamedTuple{(),Tuple{}}},DiffEqBase.StandardODEProblem},RK4,OrdinaryDiffEq.InterpolationData{ODEFunction{true,typeof(RHS),UniformScaling{Bool},Nothing,Nothing,Nothing,Nothing,Nothing,Nothing,Nothing,Nothing,Nothing},Array{Array{Float64,1},1},Array{Float64,1},Array{Array{Array{Float64,1},1},1},OrdinaryDiffEq.RK4Cache{Array{Float64,1},Array{Float64,1},Array{Float64,1}}},DiffEqBase.DEStats},ODEFunction{true,typeof(RHS),UniformScaling{Bool},Nothing,Nothing,Nothing,Nothing,Nothing,Nothing,Nothing,Nothing,Nothing},OrdinaryDiffEq.RK4Cache{Array{Float64,1},Array{Float64,1},Array{Float64,1}},OrdinaryDiffEq.DEOptions{Float64,Float64,Float64,Float64,typeof(DiffEqBase.ODE_DEFAULT_NORM),typeof(opnorm),CallbackSet{Tuple{},Tuple{}},typeof(DiffEqBase.ODE_DEFAULT_ISOUTOFDOMAIN),typeof(DiffEqBase.ODE_DEFAULT_PROG_MESSAGE),typeof(DiffEqBase.ODE_DEFAULT_UNSTABLE_CHECK),DataStructures.BinaryHeap{Float64,DataStructures.LessThan},DataStructures.BinaryHeap{Float64,DataStructures.LessThan},Nothing,Nothing,Int64,Array{Float64,1},Array{Float64,1},Array{Float64,1}},Array{Float64,1},Float64,Nothing}, ::OrdinaryDiffEq.RK4Cache{Array{Float64,1},Array{Float64,1},Array{Float64,1}}, ::Bool) at /Users/mathieu/.julia/packages/OrdinaryDiffEq/IjEvf/src/perform_step/fixed_timestep_perform_step.jl:320
[9] perform_step! at /Users/mathieu/.julia/packages/OrdinaryDiffEq/IjEvf/src/perform_step/fixed_timestep_perform_step.jl:309 [inlined]
[10] step!(::OrdinaryDiffEq.ODEIntegrator{RK4,true,Array{Float64,1},Float64,DiffEqBase.NullParameters,Float64,Float64,Float64,Array{Array{Float64,1},1},ODESolution{Float64,2,Array{Array{Float64,1},1},Nothing,Nothing,Array{Float64,1},Array{Array{Array{Float64,1},1},1},ODEProblem{Array{Float64,1},Tuple{Float64,Float64},true,DiffEqBase.NullParameters,ODEFunction{true,typeof(RHS),UniformScaling{Bool},Nothing,Nothing,Nothing,Nothing,Nothing,Nothing,Nothing,Nothing,Nothing},Base.Iterators.Pairs{Union{},Union{},Tuple{},NamedTuple{(),Tuple{}}},DiffEqBase.StandardODEProblem},RK4,OrdinaryDiffEq.InterpolationData{ODEFunction{true,typeof(RHS),UniformScaling{Bool},Nothing,Nothing,Nothing,Nothing,Nothing,Nothing,Nothing,Nothing,Nothing},Array{Array{Float64,1},1},Array{Float64,1},Array{Array{Array{Float64,1},1},1},OrdinaryDiffEq.RK4Cache{Array{Float64,1},Array{Float64,1},Array{Float64,1}}},DiffEqBase.DEStats},ODEFunction{true,typeof(RHS),UniformScaling{Bool},Nothing,Nothing,Nothing,Nothing,Nothing,Nothing,Nothing,Nothing,Nothing},OrdinaryDiffEq.RK4Cache{Array{Float64,1},Array{Float64,1},Array{Float64,1}},OrdinaryDiffEq.DEOptions{Float64,Float64,Float64,Float64,typeof(DiffEqBase.ODE_DEFAULT_NORM),typeof(opnorm),CallbackSet{Tuple{},Tuple{}},typeof(DiffEqBase.ODE_DEFAULT_ISOUTOFDOMAIN),typeof(DiffEqBase.ODE_DEFAULT_PROG_MESSAGE),typeof(DiffEqBase.ODE_DEFAULT_UNSTABLE_CHECK),DataStructures.BinaryHeap{Float64,DataStructures.LessThan},DataStructures.BinaryHeap{Float64,DataStructures.LessThan},Nothing,Nothing,Int64,Array{Float64,1},Array{Float64,1},Array{Float64,1}},Array{Float64,1},Float64,Nothing}) at /Users/mathieu/.julia/packages/OrdinaryDiffEq/IjEvf/src/iterator_interface.jl:12
[11] top-level scope at ./In[17]:3
``````