This repository was archived by the owner on Jul 19, 2023. It is now read-only.
-
-
Notifications
You must be signed in to change notification settings - Fork 72
MOLFiniteDifference ERROR: TypeError: non-boolean (Term{Bool, Nothing}) used in boolean context #369
Copy link
Copy link
Closed
Description
MOLFiniteDifference is broken (at least locally for me, maybe I am doing something wrong)
Code:
using ModelingToolkit, DiffEqOperators, LinearAlgebra, OrdinaryDiffEq
# Define some variables
@parameters t x
@variables u(..)
Dt = Differential(t)
Dxx = Differential(x)^2
eq = Dt(u(t,x)) ~ Dxx(u(t,x))
bcs = [u(0,x) ~ - x * (x-1) * sin(x),
u(t,0) ~ 0.0, u(t,1) ~ 0.0]
domains = [t ∈ IntervalDomain(0.0,1.0),
x ∈ IntervalDomain(0.0,1.0)]
pdesys = PDESystem(eq,bcs,domains,[t,x],[u(t,x)])
discretization = MOLFiniteDifference([x=>0.1],t)
prob = discretize(pdesys,discretization)Stacktrace:
ERROR: TypeError: non-boolean (Term{Bool, Nothing}) used in boolean context
Stacktrace:
[1] filter(f::DiffEqOperators.var"#182#215"{Num}, a::Vector{Num})
@ Base ./array.jl:2507
[2] symbolic_discretize(pdesys::PDESystem, discretization::MOLFiniteDifference{Vector{Pair{Num, Float64}}, Num})
@ DiffEqOperators ~/Documents/SciML/DiffEqOperators.jl/src/MOLFiniteDifference/MOL_discretization.jl:17
[3] discretize(pdesys::PDESystem, discretization::MOLFiniteDifference{Vector{Pair{Num, Float64}}, Num})
@ DiffEqOperators ~/Documents/SciML/DiffEqOperators.jl/src/MOLFiniteDifference/MOL_discretization.jl:152
[4] top-level scope
@ ~/Documents/SciML/DiffEqOperators.jl/test/MOL/MOLtest.jl:17
ERROR: TypeError: non-boolean (Term{Bool, Nothing}) used in boolean context
Stacktrace:
[1] filter(f::DiffEqOperators.var"#182#215"{Num}, a::Vector{Num})
@ Base ./array.jl:2507
[2] symbolic_discretize(pdesys::PDESystem, discretization::MOLFiniteDifference{Vector{Pair{Num, Float64}}, Num})
@ DiffEqOperators ~/Documents/SciML/DiffEqOperators.jl/src/MOLFiniteDifference/MOL_discretization.jl:17
[3] discretize(pdesys::PDESystem, discretization::MOLFiniteDifference{Vector{Pair{Num, Float64}}, Num})
@ DiffEqOperators ~/Documents/SciML/DiffEqOperators.jl/src/MOLFiniteDifference/MOL_discretization.jl:152
[4] top-level scope
@ ~/Documents/SciML/DiffEqOperators.jl/test/MOL/MOLtest.jl:17
The first line that breaks is
nottime = filter(x->x.val != t.val,pdesys.indvars)The problem is related to this behavior:
julia> typeof(t.val == t.val)
Term{Bool, Nothing}
julia> typeof(t.val === t.val)
BoolChanging != and == to !== and === everywhere in MOLFiniteDifference removes some of the errors, but there is a "not in" further down
if ModelingToolkit.operation(bc.lhs) isa Sym && t.val ∉ ModelingToolkit.arguments(bc.lhs)that I don't know how to workaround
Metadata
Metadata
Assignees
Labels
No labels