@@ -881,18 +881,23 @@ function SciMLBase.BVProblem{iip, specialize}(sys::AbstractODESystem, u0map = []
881881 stidxmap = Dict ([v => i for (i, v) in enumerate (sts)])
882882 u0_idxs = has_alg_eqs (sys) ? collect (1 : length (sts)) : [stidxmap[k] for (k,v) in u0map]
883883
884- bc = generate_function_bc (sys, u0, u0_idxs, tspan, iip)
884+ fns = generate_function_bc (sys, u0, u0_idxs, tspan)
885+ bc_oop, bc_iip = eval_or_rgf .(fns; eval_expression, eval_module)
886+ # bc(sol, p, t) = bc_oop(sol, p, t)
887+ bc (resid, u, p, t) = bc_iip (resid, u, p, t)
888+
885889 return BVProblem {iip} (f, bc, u0, tspan, p; kwargs... )
886890end
887891
888892get_callback (prob:: BVProblem ) = error (" BVP solvers do not support callbacks." )
889893
890894"""
891- generate_function_bc(sys::ODESystem, u0, u0_idxs, tspan, iip )
895+ generate_function_bc(sys::ODESystem, u0, u0_idxs, tspan)
892896
893897 Given an ODESystem with constraints, generate the boundary condition function to pass to boundary value problem solvers.
898+ Expression uses the constraints and the provided initial conditions.
894899"""
895- function generate_function_bc (sys:: ODESystem , u0, u0_idxs, tspan, iip )
900+ function generate_function_bc (sys:: ODESystem , u0, u0_idxs, tspan; kwargs ... )
896901 iv = get_iv (sys)
897902 sts = get_unknowns (sys)
898903 ps = get_ps (sys)
@@ -915,19 +920,6 @@ function generate_function_bc(sys::ODESystem, u0, u0_idxs, tspan, iip)
915920
916921 cons = map (c -> Symbolics. substitute (c, Dict (x (t) => sol (t)[idx])), cons)
917922 end
918-
919- for var in parameters (conssys)
920- if iscall (var)
921- x = operation (var)
922- t = only (arguments (var))
923- idx = pidxmap[x]
924-
925- cons = map (c -> Symbolics. substitute (c, Dict (x (t) => p[idx])), cons)
926- else
927- idx = pidxmap[var]
928- cons = map (c -> Symbolics. substitute (c, Dict (var => p[idx])), cons)
929- end
930- end
931923 end
932924
933925 init_conds = Any[]
@@ -937,12 +929,9 @@ function generate_function_bc(sys::ODESystem, u0, u0_idxs, tspan, iip)
937929 end
938930
939931 exprs = vcat (init_conds, cons)
940- bcs = Symbolics. build_function (exprs, sol, p, expression = Val{false })
941- if iip
942- return (resid, u, p, t) -> bcs[2 ](resid, u, p)
943- else
944- return (u, p, t) -> bcs[1 ](u, p)
945- end
932+ _p = reorder_parameters (sys, ps)
933+
934+ build_function_wrapper (sys, exprs, sol, _p... , t; kwargs... )
946935end
947936
948937"""
0 commit comments