Skip to content

Commit d027450

Browse files
committed
Keep MC running even when solver fails.
1 parent 20218c8 commit d027450

File tree

4 files changed

+33
-5
lines changed

4 files changed

+33
-5
lines changed

src/monte_carlo.jl

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -83,8 +83,14 @@ function mc(
8383
params_i = NamedTuple(zip(first.(parameters_variation), values_i))
8484
# take simulated values from solution
8585
sv = sol.prob.kwargs[:callback].discrete_callbacks[1].affect!.saved_values
86-
simulation = Simulation(sv, params_i, sol.retcode)
87-
86+
#simulation = Simulation(sv, params_i, sol.retcode)
87+
if SciMLBase.successful_retcode(sol)
88+
#println("Iteration is successful, val $(size(sv.u))")
89+
simulation = Simulation(sv, params_i, sol.retcode)
90+
else
91+
#println("Iteration is failed with code $(sol.retcode), val $(size(sv.u))")
92+
simulation = Simulation( params_i, sol.retcode)
93+
end
8894
return (output_func(simulation, i), false)
8995
end
9096

@@ -254,7 +260,14 @@ function mc(
254260
params_i = parameters_pregenerated[iter_i[1]]
255261
# take simulated values from solution
256262
sv = sol.prob.kwargs[:callback].discrete_callbacks[1].affect!.saved_values
257-
simulation = Simulation(sv, params_i, sol.retcode)
263+
#simulation = Simulation(sv, params_i, sol.retcode)
264+
if SciMLBase.successful_retcode(sol)
265+
#println("Iteration is successful, val $(size(sv.u))")
266+
simulation = Simulation(sv, params_i, sol.retcode)
267+
else
268+
#println("Iteration is failed with code $(sol.retcode), val $(size(sv.u))")
269+
simulation = Simulation( params_i, sol.retcode)
270+
end
258271

259272
return (output_func(simulation, i), false)
260273
end

src/simulate.jl

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,13 @@ function sim(
6565
#parameters_names = Symbol[first(x) for x in parameters]
6666
#return build_results(sol, scenario, parameters_names)
6767
sv = sol.prob.kwargs[:callback].discrete_callbacks[1].affect!.saved_values
68-
simulation = Simulation(sv, parameters_nt, sol.retcode)
68+
if SciMLBase.successful_retcode(sol)
69+
println("Iteration is successful, val $(size(sv.u))")
70+
simulation = Simulation(sv, parameters_nt, sol.retcode)
71+
else
72+
println("Iteration is failed with code $(sol.retcode), val $(size(sv.u))")
73+
simulation = Simulation( parameters_nt, sol.retcode)
74+
end
6975

7076
return SimResult(simulation, scenario)
7177
end

src/solution_interface.jl

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,9 @@ function DataFrame(mcr::MCResult; itercol=true, kwargs...)
9898

9999
if lmcr > 1
100100
for i in 2:lmcr
101-
append!(df, DataFrame(mcr[i]; iter=(itercol ? i : nothing), kwargs...))
101+
if mcr[i].status == Symbol(SciMLBase.ReturnCode.Success)
102+
append!(df, DataFrame(mcr[i]; iter=(itercol ? i : nothing), kwargs...))
103+
end
102104
end
103105
end
104106
return df

src/types.jl

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -237,6 +237,13 @@ Simulation(sv::SavedValues, params, status) = Simulation(
237237
Symbol(status)
238238
)
239239

240+
# copy fix is tmp needed not to rewrite SavedValues with new simulation
241+
Simulation( params, status) = Simulation(
242+
DiffEqArray([0],[0]),
243+
Symbol("error"),
244+
params,
245+
Symbol(status)
246+
)
240247
status(s::Simulation) = s.status
241248
times(s::Simulation) = s.vals.t
242249
vals(s::Simulation) = s.vals.u

0 commit comments

Comments
 (0)