@@ -10,8 +10,8 @@ function get_bcs(bcs,tdomain,domain)
1010 lhs_deriv_depvars_bcs = Dict ()
1111 no_bcs = size (bcs,1 )
1212 for i = 1 : no_bcs
13- var = bcs[i]. lhs. op
14- if var isa Variable
13+ var = ModelingToolkit . operation ( bcs[i]. lhs)
14+ if var isa Sym
1515 var = var. name
1616 if ! haskey (lhs_deriv_depvars_bcs,var)
1717 lhs_deriv_depvars_bcs[var] = Array {Expr} (undef,3 )
@@ -24,10 +24,10 @@ function get_bcs(bcs,tdomain,domain)
2424 elseif isequal (bcs[i]. lhs. args[2 ],domain. upper) # u(t,x=x_final)
2525 j = 3
2626 end
27- if bcs[i]. rhs isa ModelingToolkit. Constant
28- lhs_deriv_depvars_bcs[var][j] = :(var= $ (bcs[i]. rhs. value ))
27+ if ! ( bcs[i]. rhs isa ModelingToolkit. Symbolic)
28+ lhs_deriv_depvars_bcs[var][j] = :(var= $ (bcs[i]. rhs))
2929 else
30- lhs_deriv_depvars_bcs[var][j] = Expr (bcs[i]. rhs)
30+ lhs_deriv_depvars_bcs[var][j] = toexpr (bcs[i]. rhs)
3131 end
3232 end
3333 end
4444
4545function discretize_2 (input,deriv_order,approx_order,dx,X,len,
4646 deriv_var,dep_var_idx,indep_var_idx)
47- if input isa ModelingToolkit. Constant
47+ if ! ( input isa ModelingToolkit. Symbolic)
4848 return :($ (input. value))
49- elseif input isa Operation
50- if input. op isa Variable
49+ else
50+ if input isa Sym
5151 expr = :(0.0 )
52- var = input. op . name
52+ var = nameof ( input)
5353 if haskey (indep_var_idx,var) # ind. var.
5454 if var != :(t)
5555 i = indep_var_idx[var]
@@ -76,22 +76,24 @@ function discretize_2(input,deriv_order,approx_order,dx,X,len,
7676 end
7777 return expr
7878 elseif input. op isa Differential
79- var = input. op. x. op . name
79+ var = nameof ( input. op. x)
8080 push! (deriv_var,var)
8181 return discretize_2 (input. args[1 ],deriv_order+ 1 ,approx_order,dx,X,
8282 len,deriv_var,dep_var_idx,indep_var_idx)
8383 pop! (deriv_var,var)
8484 else
85+ name = ModelingToolkit. operation (input). name
8586 if size (input. args,1 ) == 1
8687 aux = discretize_2 (input. args[1 ],deriv_order,approx_order,dx,X,
8788 len,deriv_var,dep_var_idx,indep_var_idx)
88- return :(broadcast ($ (input. op), $ aux))
89+ @show input. op
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,10 @@ 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+ if input. op isa Sym
173+ var = nameof ( input)
172174 else # var isa Differential
173- var = input. args[1 ]. op . name
175+ var = nameof (ModelingToolkit . operation ( input. args[1 ]))
174176 lhs_deriv_depvars[var] = j
175177 end
176178 dep_var_idx[var] = j
@@ -179,6 +181,7 @@ function DiffEqBase.discretize(pdesys::PDESystem,discretization::MOLFiniteDiffer
179181 aux = discretize_2 ( eqs[j]. rhs,0 ,approx_order,dx,X,len,
180182 [],dep_var_idx,indep_var_idx)
181183 # TODO : is there a better way to convert an Expr into a Function?
184+ @show aux
182185 dep_var_disc[var] = @eval (Q,u,t) -> $ aux
183186 end
184187
0 commit comments