Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Convert PDE problem to ODE problem #150

Closed
ghost opened this issue Aug 10, 2022 · 2 comments · Fixed by #168
Closed

Convert PDE problem to ODE problem #150

ghost opened this issue Aug 10, 2022 · 2 comments · Fixed by #168

Comments

@ghost
Copy link

ghost commented Aug 10, 2022

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(pi
x),
Dtu1(x,0) ~ cos(pix),
Dtu2(x,0) ~ -sin(pi
x),
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

@xtalax
Copy link
Member

xtalax commented Aug 10, 2022

I'm afraid that second time derivatives are not yet supported, I will be implementing them this week however.

@ghost
Copy link
Author

ghost commented Aug 10, 2022

Hi Alex, thanks for informing. Looking forward to it.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
1 participant