-
-
Notifications
You must be signed in to change notification settings - Fork 39
Description
Hi all,
I got errors when converting PDE problem to ODE problem by using "discretize". Could someone please help?
Here are the codes:
using ModelingToolkit, DomainSets, MethodOfLines, OrdinaryDiffEq
@parameters t, x
@variables u1(..), u2(..), u3(..), Dtu1(..), Dtu2(..)
Dt = Differential(t)
Dtt = Differential(t)^2
Dx = Differential(x)
Dxx = Differential(x)^2
eqs = [
Dt(Dtu1(x,t)) ~ Dxx(u1(x,t)) + u3(x,t)sin(pix),
Dtu1(x,t) ~ Dt(u1(x,t)),
Dt(Dtu2(x,t)) ~ Dxx(u2(x,t)) + u3(x,t)cos(pix),
Dtu2(x,t) ~ Dt(u2(x,t)),
0. ~ u1(x,t)sin(pix) + u2(x,t)cos(pix) - exp(-t)
]
L = 1.0
bcs = [
u1(x,0) ~ sin(pix),
u2(x,0) ~ cos(pix),
Dtu1(x,0) ~ cos(pix),
Dtu2(x,0) ~ -sin(pix),
u1(0,t) ~ 0.,
u2(0,t) ~ exp(-t),
u1(L,t) ~ 0.,
u2(L,t) ~ -exp(-t)
]
domains = [
t ∈ Interval(0.0,1.0),
x ∈ Interval(0.0,L)
]
@nAmed pdesys = PDESystem(eqs, bcs, domains, [x,t],
[u1(x,t), u2(x,t), u3(x,t), Dtu1(x,t), Dtu2(x,t)])
N = 20
dx = (L-0.0)/N
order = 2
discretization = MOLFiniteDifference([x=>dx], t, approx_order=2, grid_align=center_align)
prob = discretize(pdesys, discretization)
Then, it shows the error:
ArgumentError: Term{Real, Base.ImmutableDict{DataType, Any}}[u1ˍtt2, u1ˍtt3, u1ˍtt4, u1ˍtt5, u1ˍtt6, u1ˍtt7, u1ˍtt8, u1ˍtt9, u1ˍtt10, u1ˍtt11, u1ˍtt12, u1ˍtt13, u1ˍtt14, u1ˍtt15, u1ˍtt16, u1ˍtt17, u1ˍtt18, u1ˍtt19, u1ˍtt20] are missing from the variable map.
Stacktrace:
[1] throw_missingvars(vars::Vector{Term{Real, Base.ImmutableDict{DataType, Any}}})
@ ModelingToolkit ~/.julia/packages/ModelingToolkit/9ppm9/src/variables.jl:98
[2] _varmap_to_vars(varmap::Dict{Any, Any}, varlist::Vector{Term{Real, Base.ImmutableDict{DataType, Any}}}; defaults::Dict{Any, Any}, check::Bool, toterm::typeof(Symbolics.diff2term))
@ ModelingToolkit ~/.julia/packages/ModelingToolkit/9ppm9/src/variables.jl:92
[3] varmap_to_vars(varmap::Vector{Pair}, varlist::Vector{Term{Real, Base.ImmutableDict{DataType, Any}}}; defaults::Dict{Any, Any}, check::Bool, toterm::Function, promotetoconcrete::Nothing, tofloat::Bool, use_union::Bool)
@ ModelingToolkit ~/.julia/packages/ModelingToolkit/9ppm9/src/variables.jl:61
[4] process_DEProblem(constructor::Type, sys::ODESystem, u0map::Vector{Pair}, parammap::SciMLBase.NullParameters; implicit_dae::Bool, du0map::Nothing, version::Nothing, tgrad::Bool, jac::Bool, checkbounds::Bool, sparse::Bool, simplify::Bool, linenumbers::Bool, parallel::Symbolics.SerialForm, eval_expression::Bool, use_union::Bool, kwargs::Base.Pairs{Symbol, Bool, Tuple{Symbol, Symbol}, NamedTuple{(:has_difference, :check_length), Tuple{Bool, Bool}}})
@ ModelingToolkit ~/.julia/packages/ModelingToolkit/9ppm9/src/systems/diffeqs/abstractodesystem.jl:541
[5] (ODEProblem{true})(sys::ODESystem, u0map::Vector{Pair}, tspan::Tuple{Float64, Float64}, parammap::SciMLBase.NullParameters; callback::Nothing, check_length::Bool, kwargs::Base.Pairs{Symbol, Union{}, Tuple{}, NamedTuple{(), Tuple{}}})
@ ModelingToolkit ~/.julia/packages/ModelingToolkit/9ppm9/src/systems/diffeqs/abstractodesystem.jl:635
[6] (ODEProblem{true})(sys::ODESystem, u0map::Vector{Pair}, tspan::Tuple{Float64, Float64}, parammap::SciMLBase.NullParameters) (repeats 2 times)
@ ModelingToolkit ~/.julia/packages/ModelingToolkit/9ppm9/src/systems/diffeqs/abstractodesystem.jl:634
[7] ODEProblem(::ODESystem, ::Vector{Pair}, ::Vararg{Any}; kwargs::Base.Pairs{Symbol, Union{}, Tuple{}, NamedTuple{(), Tuple{}}})
@ ModelingToolkit ~/.julia/packages/ModelingToolkit/9ppm9/src/systems/diffeqs/abstractodesystem.jl:627
[8] ODEProblem(::ODESystem, ::Vector{Pair}, ::Vararg{Any})
@ ModelingToolkit ~/.julia/packages/ModelingToolkit/9ppm9/src/systems/diffeqs/abstractodesystem.jl:627
[9] discretize(pdesys::PDESystem, discretization::MOLFiniteDifference{MethodOfLines.CenterAlignedGrid})
@ MethodOfLines ~/.julia/packages/MethodOfLines/5wITU/src/MOL_discretization.jl:154
[10] top-level scope
@ In[8]:1
[11] eval
@ ./boot.jl:373 [inlined]
[12] include_string(mapexpr::typeof(REPL.softscope), mod::Module, code::String, filename::String)
@ Base ./loading.jl:1196