# MethodError: no method matching -(::SymbolicUtils.BasicSymbolic{Real}, ::Symbolics.Equation)

Hello everyone! I try to model simple internal ballistics model in ModelingToolkit.jl framework.

``````using ModelingToolkit, DifferentialEquations, Plots
begin
@variables t
D = Differential(t)
end
function terminate_affect!(integ, u, p, ctx)
terminate!(integ)
end
begin
@parameters κ1 λ1 μ1 κ2 λ2 μ2 Jk zk ν p_s ω f α θ ρ W0 qfi S pf pv ld
@variables ψ(t)=0.0 z(t)=0.0 p(t) v(t)=0.0 x(t)=0.0
end
eqs = [
D(ψ) ~ ifelse(
z < 1.0,
κ1 * (1. + 2*λ1 * z + 3 * μ1 * z^2) * D(z),
ifelse(
z < zk,
κ2 * (1. + 2*λ2 * (z-1) + 3 * μ2 * (z-1)^2) * D(z),
0
)
)
D(z) ~  ifelse(
z < zk,
ifelse(
p > p_s,
p / Jk,
(p_s^(1-ν) * p^ν) / Jk
),
0
)
p ~ pv + (f * ω * ψ - 0.5*θ*qfi*v^2) / (W0 - ω*(1-ψ)/ρ - ω*ψ*α + S * x)

D(v) ~ ifelse(
(p > pf)|(v>0),
p * S / qfi,
0
)
D(x) ~ v
]

@named intbal = ODESystem(
eqs, continuous_events=[z ~ zk=>z ~ zk, ψ~1=>ψ~1, (x - ld) ~ 0 => (terminate_affect!, [x], [], nothing)]
)
simp = structural_simplify(intbal)
pars = [
κ1=>0.239,
λ1=>2.26,
μ1=>0.0,
κ2=>0.835,
λ2=>-0.943,
μ2=>0.0,
Jk=>330.0e3,
p_s=>50e6,
ν=>0.75,
zk=>1.53,

f=>988e3,
ρ=>1600,
θ=>0.236,
α=>1.038e-3,
ω=>0.01,

W0=>0.125E-3,

qfi=>0.389,
S=>0.25*0.03^2*pi,
pf=>50e6,
pv=>4e6,
ld=>2.2
]
prob = ODEProblem(simp, [], (0.0, 0.05), pars)
``````

The above code give me the following error

``````MethodError: no method matching -(::SymbolicUtils.BasicSymbolic{Real}, ::Symbolics.Equation)

Closest candidates are:

-(!Matched::MultivariatePolynomials.RationalPoly, ::Any)

@ MultivariatePolynomials ~/.julia/packages/MultivariatePolynomials/6TYc8/src/rational.jl:73

-(!Matched::ChainRulesCore.AbstractThunk, ::Any)

@ ChainRulesCore ~/.julia/packages/ChainRulesCore/0t04l/src/tangent_types/thunks.jl:34

-(!Matched::MultivariatePolynomials.AbstractPolynomialLike, ::Any)

@ MultivariatePolynomials ~/.julia/packages/MultivariatePolynomials/6TYc8/src/operators.jl:65

...

(::ModelingToolkit.var"#329#339")(::Symbolics.Equation)@callbacks.jl:381
iterate@generator.jl:47[inlined]
_collect(::Vector{Symbolics.Equation}, ::Base.Generator{Vector{Symbolics.Equation}, ModelingToolkit.var"#329#339"}, ::Base.EltypeUnknown, ::Base.HasShape{1})@array.jl:802
collect_similar@array.jl:711[inlined]
map@abstractarray.jl:3263[inlined]
var"#generate_rootfinding_callback#327"(::Base.Pairs{Symbol, Union{}, Tuple{}, NamedTuple{(), Tuple{}}}, ::typeof(ModelingToolkit.generate_rootfinding_callback), ::Vector{ModelingToolkit.SymbolicContinuousCallback}, ::ModelingToolkit.ODESystem, ::Vector{Any}, ::Vector{SymbolicUtils.BasicSymbolic{Real}})@callbacks.jl:379
generate_rootfinding_callback@callbacks.jl:371[inlined]
var"#generate_rootfinding_callback#326"(::Base.Pairs{Symbol, Union{}, Tuple{}, NamedTuple{(), Tuple{}}}, ::typeof(ModelingToolkit.generate_rootfinding_callback), ::ModelingToolkit.ODESystem, ::Vector{Any}, ::Vector{SymbolicUtils.BasicSymbolic{Real}})@callbacks.jl:368
generate_rootfinding_callback(::ModelingToolkit.ODESystem, ::Vector{Any}, ::Vector{SymbolicUtils.BasicSymbolic{Real}})@callbacks.jl:364
generate_rootfinding_callback(::ModelingToolkit.ODESystem)@callbacks.jl:364
var"#process_events#369"(::Nothing, ::Bool, ::Base.Pairs{Symbol, Union{}, Tuple{}, NamedTuple{(), Tuple{}}}, ::typeof(ModelingToolkit.process_events), ::ModelingToolkit.ODESystem)@callbacks.jl:503
var"#_#586"(::Nothing, ::Bool, ::Base.Pairs{Symbol, Union{}, Tuple{}, NamedTuple{(), Tuple{}}}, ::Type{SciMLBase.ODEProblem{true, SciMLBase.AutoSpecialize}}, ::ModelingToolkit.ODESystem, ::Vector{Any}, ::Tuple{Float64, Float64}, ::Vector{Pair{Symbolics.Num, Float64}})@abstractodesystem.jl:838
ODEProblem@abstractodesystem.jl:827[inlined]
#_#584@abstractodesystem.jl:814[inlined]
ODEProblem@abstractodesystem.jl:813[inlined]
#ODEProblem#583@abstractodesystem.jl:810[inlined]
ODEProblem@abstractodesystem.jl:809[inlined]
top-level scope@Local: 1[inlined]
``````

Honestly, im not very common with Julia and with ModelingToolkit too. So I have no idea what the problem here

The code does not run here, `pars` not defined.

Base on the stack trace, it looks like you have a problem in your event definitions

`generate_rootfinding_callback`

Sorry, i just forget to copy this cell from my Pluto notebook. Im edit the code.
I try to remove all callbacks, but I get the following error. I will try to debug my code

``````DomainError with -3.775645222142543e8:

Exponentiation yielding a complex result requires a complex argument.

Replace x^y with (x+0im)^y, Complex(x)^y, or similar.
``````