|
895 | 895 | Compile an affect defined by a set of equations. Systems with algebraic equations will solve implicit discrete problems to obtain their next state. Systems without will generate functions that perform explicit updates. |
896 | 896 | """ |
897 | 897 | function compile_equational_affect( |
898 | | - aff::Union{AffectSystem, Vector{Equation}}, sys; reset_jumps = false, kwargs...) |
| 898 | + aff::Union{AffectSystem, Vector{Equation}}, sys; reset_jumps = false, |
| 899 | + eval_expression = false, eval_module = @__MODULE__, kwargs...) |
899 | 900 | if aff isa AbstractVector |
900 | 901 | aff = make_affect( |
901 | 902 | aff; iv = get_iv(sys), warn_no_algebraic = false) |
@@ -930,11 +931,13 @@ function compile_equational_affect( |
930 | 931 | integ = gensym(:MTKIntegrator) |
931 | 932 |
|
932 | 933 | u_up, u_up! = build_function_wrapper(sys, (@view rhss[is_u]), dvs, _ps..., t; |
933 | | - wrap_code = add_integrator_header(sys, integ, :u), |
934 | | - expression = Val{false}, outputidxs = u_idxs, wrap_mtkparameters, cse = false) |
| 934 | + wrap_code = add_integrator_header(sys, integ, :u), expression = Val{false}, |
| 935 | + outputidxs = u_idxs, wrap_mtkparameters, cse = false, eval_expression, |
| 936 | + eval_module) |
935 | 937 | p_up, p_up! = build_function_wrapper(sys, (@view rhss[is_p]), dvs, _ps..., t; |
936 | | - wrap_code = add_integrator_header(sys, integ, :p), |
937 | | - expression = Val{false}, outputidxs = p_idxs, wrap_mtkparameters, cse = false) |
| 938 | + wrap_code = add_integrator_header(sys, integ, :p), expression = Val{false}, |
| 939 | + outputidxs = p_idxs, wrap_mtkparameters, cse = false, eval_expression, |
| 940 | + eval_module) |
938 | 941 |
|
939 | 942 | return let dvs_to_update = dvs_to_update, ps_to_update = ps_to_update, |
940 | 943 | reset_jumps = reset_jumps, u_up! = u_up!, p_up! = p_up! |
@@ -963,7 +966,8 @@ function compile_equational_affect( |
963 | 966 |
|
964 | 967 | affprob = ImplicitDiscreteProblem(affsys, [dv => 0 for dv in unknowns(affsys)], |
965 | 968 | (0, 0), [p => 0.0 for p in parameters(affsys)]; |
966 | | - build_initializeprob = false, check_length = false) |
| 969 | + build_initializeprob = false, check_length = false, eval_expression, |
| 970 | + eval_module, check_compatibility = false) |
967 | 971 |
|
968 | 972 | function implicit_affect!(integ) |
969 | 973 | new_u0 = affu_getter(integ) |
|
0 commit comments