MethodOfLines.jl
MethodOfLines.jl copied to clipboard
Convert PDE problem to ODE problem
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
I'm afraid that second time derivatives are not yet supported, I will be implementing them this week however.
Hi Alex, thanks for informing. Looking forward to it.