Skip to content
This repository was archived by the owner on Jul 19, 2023. It is now read-only.

Commit d3d9aa0

Browse files
Merge pull request #288 from SciML/myb/mtk
Upgrade to MTK 4.0
2 parents e9f027d + 1c86cca commit d3d9aa0

3 files changed

Lines changed: 24 additions & 20 deletions

File tree

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,3 +3,4 @@
33
*.jl.mem
44
deps/deps.jl
55
Manifest.toml
6+
*.png

Project.toml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
name = "DiffEqOperators"
22
uuid = "9fdde737-9c7f-55bf-ade8-46b3f136cc48"
33
authors = ["Chris Rackauckas <[email protected]>"]
4-
version = "4.14.0"
4+
version = "4.15.0"
55

66
[deps]
77
BandedMatrices = "aae01518-5342-5314-be14-df237901396f"
@@ -24,7 +24,7 @@ DiffEqBase = "6.4.1"
2424
ForwardDiff = "0.10"
2525
LazyArrays = "0.17, 0.18, 0.19"
2626
LazyBandedMatrices = "0.3"
27-
ModelingToolkit = "0.10.0, 1.0, 2.0, 3.0"
27+
ModelingToolkit = "4"
2828
NNlib = "0.6, 0.7"
2929
StaticArrays = "0.10, 0.11, 0.12"
3030
julia = "1"

src/MOL_discretization.jl

Lines changed: 21 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
using ModelingToolkit: operation
12
# Method of lines discretization scheme
23
struct MOLFiniteDifference{T} <: DiffEqBase.AbstractDiscretization
34
dxs::T
@@ -10,8 +11,8 @@ function get_bcs(bcs,tdomain,domain)
1011
lhs_deriv_depvars_bcs = Dict()
1112
no_bcs = size(bcs,1)
1213
for i = 1:no_bcs
13-
var = bcs[i].lhs.op
14-
if var isa Variable
14+
var = operation(bcs[i].lhs)
15+
if var isa Sym
1516
var = var.name
1617
if !haskey(lhs_deriv_depvars_bcs,var)
1718
lhs_deriv_depvars_bcs[var] = Array{Expr}(undef,3)
@@ -24,10 +25,10 @@ function get_bcs(bcs,tdomain,domain)
2425
elseif isequal(bcs[i].lhs.args[2],domain.upper) # u(t,x=x_final)
2526
j = 3
2627
end
27-
if bcs[i].rhs isa ModelingToolkit.Constant
28-
lhs_deriv_depvars_bcs[var][j] = :(var=$(bcs[i].rhs.value))
28+
if !(bcs[i].rhs isa ModelingToolkit.Symbolic)
29+
lhs_deriv_depvars_bcs[var][j] = :(var=$(bcs[i].rhs))
2930
else
30-
lhs_deriv_depvars_bcs[var][j] = Expr(bcs[i].rhs)
31+
lhs_deriv_depvars_bcs[var][j] = toexpr(bcs[i].rhs)
3132
end
3233
end
3334
end
@@ -44,12 +45,12 @@ end
4445

4546
function discretize_2(input,deriv_order,approx_order,dx,X,len,
4647
deriv_var,dep_var_idx,indep_var_idx)
47-
if input isa ModelingToolkit.Constant
48-
return :($(input.value))
49-
elseif input isa Operation
50-
if input.op isa Variable
48+
if !(input isa ModelingToolkit.Symbolic)
49+
return :($(input))
50+
else
51+
if input isa Sym || (input isa Term && operation(input) isa Sym)
5152
expr = :(0.0)
52-
var = input.op.name
53+
var = nameof(input isa Sym ? input : operation(input))
5354
if haskey(indep_var_idx,var) # ind. var.
5455
if var != :(t)
5556
i = indep_var_idx[var]
@@ -75,23 +76,24 @@ function discretize_2(input,deriv_order,approx_order,dx,X,len,
7576
end
7677
end
7778
return expr
78-
elseif input.op isa Differential
79-
var = input.op.x.op.name
79+
elseif input isa Term && operation(input) isa Differential
80+
var = nameof(input.op.x)
8081
push!(deriv_var,var)
8182
return discretize_2(input.args[1],deriv_order+1,approx_order,dx,X,
8283
len,deriv_var,dep_var_idx,indep_var_idx)
8384
pop!(deriv_var,var)
8485
else
86+
name = nameof(operation(input))
8587
if size(input.args,1) == 1
8688
aux = discretize_2(input.args[1],deriv_order,approx_order,dx,X,
8789
len,deriv_var,dep_var_idx,indep_var_idx)
88-
return :(broadcast($(input.op), $aux))
90+
return :(broadcast($name, $aux))
8991
else
9092
aux_1 = discretize_2(input.args[1],deriv_order,approx_order,dx,X,
9193
len,deriv_var,dep_var_idx,indep_var_idx)
9294
aux_2 = discretize_2(input.args[2],deriv_order,approx_order,dx,X,
9395
len,deriv_var,dep_var_idx,indep_var_idx)
94-
return :(broadcast($(input.op), $aux_1, $aux_2))
96+
return :(broadcast($name, $aux_1, $aux_2))
9597
end
9698
end
9799
end
@@ -132,7 +134,7 @@ function DiffEqBase.discretize(pdesys::PDESystem,discretization::MOLFiniteDiffer
132134
len = Array{Any}(undef,no_indep_vars)
133135
k = 0
134136
for i = 1:no_indep_vars
135-
var = pdesys.domain[i].variables.op.name
137+
var = nameof(pdesys.domain[i].variables)
136138
indep_var_idx[var] = i
137139
domain[i] = pdesys.domain[i].domain
138140
if var != :(t)
@@ -167,10 +169,11 @@ function DiffEqBase.discretize(pdesys::PDESystem,discretization::MOLFiniteDiffer
167169
no_dep_vars = size(eqs,1)
168170
for j = 1:no_dep_vars
169171
input = eqs[j].lhs
170-
if input.op isa Variable
171-
var = input.op.name
172+
op = operation(input)
173+
if op isa Sym
174+
var = nameof(op)
172175
else #var isa Differential
173-
var = input.args[1].op.name
176+
var = nameof(operation(input.args[1]))
174177
lhs_deriv_depvars[var] = j
175178
end
176179
dep_var_idx[var] = j

0 commit comments

Comments
 (0)