@@ -79,7 +79,6 @@ rlc_eqs = E_rlc * Dx ~ A_rlc * x + B_rlc .* u(t)
7979# Problems using constant voltage input
8080rlc_prob = ODEProblem(rlc_sys, [i_R => 0.0, v_C => 0.0], (0.0, 1e-3))
8181rlc_static_prob = ODEProblem{false}(rlc_sys, SA[i_R => 0.0, v_C => 0.0], (0.0, 1e-3))
82- rlc_dae_prob = DAEProblem(rlc_sys, [i_R => 0.0, v_C => 0.0, D(i_R) => 0.0, D(i_L) => 0.0], [], (0.0, 1e-3))
8382```
8483
8584## Index-2 DAE: Two Interconnected Rotating Masses
@@ -124,7 +123,6 @@ masses_eqs = E_masses * Dx ~ A_masses * x + B_masses * u(t)
124123# Problems using torque inputs
125124masses_prob = ODEProblem(masses_sys, [], (0.0, 1.0))
126125masses_static_prob = ODEProblem{false}(masses_sys, SA[], (0.0, 1.0))
127- masses_dae_prob = DAEProblem(masses_sys, [D(θ2) => 0.0, D(ω1) => 0.0], [], (0.0, 1.0))
128126```
129127
130128## Index-2 DAE: RL Network
@@ -165,7 +163,6 @@ rl_eqs = E_rl * Dx ~ A_rl * x + B_rl .* u(t)
165163# Problems using current source input
166164rl_prob = ODEProblem(rl_sys, [v_L => 1.0], (0.0, 1.0))
167165rl_static_prob = ODEProblem{false}(rl_sys, SA[v_L => 1.0], (0.0, 1.0))
168- rl_dae_prob = DAEProblem(rl_sys, [v_L => 1.0, D(v_L) => 0.0, D(i1) => 0.0], [], (0.0, 1.0))
169166```
170167
171168## Index-3 DAE: Cart Pendulum
@@ -215,7 +212,6 @@ cart_eqs = E_cart * Dx ~ A_cart * x + B_cart .* u(t)
215212# Problems using force input
216213cart_prob = ODEProblem(cart_sys, [dy_cart => 0.0, y_cart => 0.0], (0.0, 1.0))
217214cart_static_prob = ODEProblem{false}(cart_sys, SA[dy_cart => 0.0, y_cart => 0.0], (0.0, 1.0))
218- cart_dae_prob = DAEProblem(cart_sys, [dy_cart => 0.0, y_cart => 0.0], [], (0.0, 1.0))
219215```
220216
221217## Index-3 DAE: Electric Generator
@@ -258,7 +254,6 @@ gen_eqs = E_gen * Dx ~ A_gen * x + B_gen .* u(t)
258254# Problems using torque input
259255gen_prob = ODEProblem(gen_sys, [ω_gen => 1.0], (0.0, 1.0))
260256gen_static_prob = ODEProblem{false}(gen_sys, SA[ω_gen => 1.0], (0.0, 1.0))
261- gen_dae_prob = DAEProblem(gen_sys, [ω_gen => 1.0, D(ω_gen) => 0.0], [ω_gen => 0.0], (0.0, 1.0))
262257```
263258
264259## Index-3 DAE: Damped Mass-Spring System
@@ -321,8 +316,8 @@ spring_eqs = E_spring_5 * Dx ~ A_spring_5 * x + B_spring_5 .* u(t)
321316@mtkbuild spring_sys = ODESystem(spring_eqs, t)
322317
323318# Problems using force input
324- spring_prob = ODEProblem(spring_sys, [λ_spring => 0.0, v1_spring => 0 .0], (0.0, 2 .0))
325- spring_static_prob = ODEProblem{false}(spring_sys, SA[λ_spring => 0.0, v1_spring => 0 .0], (0.0, 2 .0))
319+ spring_prob = ODEProblem(spring_sys, [λ_spring => 0.0, v1_spring => 1 .0], (0.0, 20 .0))
320+ spring_static_prob = ODEProblem{false}(spring_sys, SA[λ_spring => 0.0, v1_spring => 1 .0], (0.0, 20 .0))
326321```
327322
328323## Generate Reference Solutions
@@ -331,7 +326,6 @@ spring_static_prob = ODEProblem{false}(spring_sys, SA[λ_spring => 0.0, v1_sprin
331326# Generate reference solutions for all systems using robust methods
332327rlc_ref = solve(rlc_prob, Rodas5P(), abstol=abstol_ref, reltol=reltol_ref)
333328rlc_static_ref = solve(rlc_static_prob, Rodas5P(), abstol=abstol_ref, reltol=reltol_ref)
334- rlc_dae_ref = solve(rlc_dae_prob, IDA(), abstol=abstol_ref, reltol=reltol_ref)
335329
336330masses_ref = solve(masses_prob, Rodas5P(), abstol=abstol_ref, reltol=reltol_ref)
337331masses_static_ref = solve(masses_static_prob, Rodas5P(), abstol=abstol_ref, reltol=reltol_ref)
@@ -402,7 +396,7 @@ reltols = 1.0 ./ 10.0 .^ (1:4)
402396# RLC Circuit Work-Precision
403397setups_rlc = [
404398 Dict(:prob_choice => 1, :alg=>Rosenbrock23()),
405- Dict(:prob_choice => 1, :alg=>Rodas4 ()),
399+ Dict(:prob_choice => 1, :alg=>Rodas5P ()),
406400 Dict(:prob_choice => 1, :alg=>CVODE_BDF()),
407401 Dict(:prob_choice => 1, :alg=>FBDF()),
408402 Dict(:prob_choice => 1, :alg=>QNDF()),
@@ -419,9 +413,9 @@ plot(wp_rlc, title="RLC Circuit (Index-1) Work-Precision")
419413
420414```julia
421415setups_masses = [
422- Dict(:prob_choice => 1 , :alg=>Rosenbrock23()),
423- Dict(:prob_choice => 1, :alg=>Rodas4 ()),
424- Dict(:prob_choice => 1, :alg=>CVODE_BDF()),
416+ # Dict(:prob_choice => 2 , :alg=>Rosenbrock23()),
417+ Dict(:prob_choice => 1, :alg=>Rodas5P ()),
418+ # Dict(:prob_choice => 1, :alg=>CVODE_BDF()),
425419 Dict(:prob_choice => 1, :alg=>FBDF()),
426420 Dict(:prob_choice => 1, :alg=>QNDF()),
427421 Dict(:prob_choice => 2, :alg=>Rodas4()),
@@ -436,10 +430,11 @@ plot(wp_masses, title="Two Masses (Index-2) Work-Precision")
436430### Index-2 DAE: RL Network
437431
438432```julia
433+ #=
439434setups_rl = [
440435 Dict(:prob_choice => 1, :alg=>Rosenbrock23()),
441- Dict(:prob_choice => 1, :alg=>Rodas4 ()),
442- Dict(:prob_choice => 1, :alg=>CVODE_BDF()),
436+ Dict(:prob_choice => 1, :alg=>Rodas5P ()),
437+ # Dict(:prob_choice => 1, :alg=>CVODE_BDF()),
443438 Dict(:prob_choice => 1, :alg=>FBDF()),
444439 Dict(:prob_choice => 1, :alg=>QNDF()),
445440 Dict(:prob_choice => 2, :alg=>Rodas4()),
@@ -449,15 +444,16 @@ setups_rl = [
449444wp_rl = WorkPrecisionSet(all_probs[3], abstols, reltols, setups_rl;
450445 save_everystep=false, appxsol=all_refs[3], maxiters=Int(1e5), numruns=10)
451446plot(wp_rl, title="RL Network (Index-2) Work-Precision")
447+ =#
452448```
453449
454450### Index-3 DAE: Cart Pendulum
455451
456452```julia
457453setups_cart = [
458454 Dict(:prob_choice => 1, :alg=>Rosenbrock23()),
459- Dict(:prob_choice => 1, :alg=>Rodas4 ()),
460- Dict(:prob_choice => 1, :alg=>CVODE_BDF()),
455+ Dict(:prob_choice => 1, :alg=>Rodas5P ()),
456+ # Dict(:prob_choice => 1, :alg=>CVODE_BDF()),
461457 Dict(:prob_choice => 1, :alg=>FBDF()),
462458 Dict(:prob_choice => 1, :alg=>QNDF()),
463459 Dict(:prob_choice => 2, :alg=>Rodas4()),
@@ -474,7 +470,7 @@ plot(wp_cart, title="Cart Pendulum (Index-3) Work-Precision")
474470```julia
475471setups_gen = [
476472 Dict(:prob_choice => 1, :alg=>Rosenbrock23()),
477- Dict(:prob_choice => 1, :alg=>Rodas4 ()),
473+ Dict(:prob_choice => 1, :alg=>Rodas5P ()),
478474 Dict(:prob_choice => 1, :alg=>CVODE_BDF()),
479475 Dict(:prob_choice => 1, :alg=>FBDF()),
480476 Dict(:prob_choice => 1, :alg=>QNDF()),
@@ -492,8 +488,8 @@ plot(wp_gen, title="Electric Generator (Index-3) Work-Precision")
492488```julia
493489setups_spring = [
494490 Dict(:prob_choice => 1, :alg=>Rosenbrock23()),
495- Dict(:prob_choice => 1, :alg=>Rodas4 ()),
496- Dict(:prob_choice => 1, :alg=>CVODE_BDF()),
491+ Dict(:prob_choice => 1, :alg=>Rodas5P ()),
492+ # Dict(:prob_choice => 1, :alg=>CVODE_BDF()),
497493 Dict(:prob_choice => 1, :alg=>FBDF()),
498494 Dict(:prob_choice => 1, :alg=>QNDF()),
499495 Dict(:prob_choice => 2, :alg=>Rodas4()),
@@ -511,12 +507,11 @@ plot(wp_spring, title="Mass-Spring (Index-3) Work-Precision")
511507abstols_low = 1.0 ./ 10.0 .^ (7:12)
512508reltols_low = 1.0 ./ 10.0 .^ (4:9)
513509
514- # Combined analysis for all systems with DASSL and DASKR where available
515510all_setups = [
516511 Dict(:prob_choice => 1, :alg=>Rosenbrock23()),
517512 Dict(:prob_choice => 1, :alg=>Rodas4()),
518- Dict(:prob_choice => 1, :alg=>Rodas5 ()),
519- Dict(:prob_choice => 1, :alg=>CVODE_BDF()),
513+ Dict(:prob_choice => 1, :alg=>Rodas5P ()),
514+ # Dict(:prob_choice => 1, :alg=>CVODE_BDF()),
520515 Dict(:prob_choice => 1, :alg=>FBDF()),
521516 Dict(:prob_choice => 1, :alg=>QNDF()),
522517 Dict(:prob_choice => 2, :alg=>Rodas5P()),
@@ -542,11 +537,11 @@ reltols_high = 1.0 ./ 10.0 .^ (1:4)
542537# High tolerance setups - focus on speed
543538high_setups = [
544539 Dict(:prob_choice => 1, :alg=>Rosenbrock23()),
545- Dict(:prob_choice => 1, :alg=>Rodas4 ()),
546- Dict(:prob_choice => 1, :alg=>CVODE_BDF()),
547- Dict(:prob_choice => 1, :alg=>TRBDF2 ()),
548- Dict(:prob_choice => 1, :alg=>KenCarp4 ()),
549- Dict(:prob_choice => 2, :alg=>Rodas4 ()),
540+ Dict(:prob_choice => 1, :alg=>Rodas5P ()),
541+ # Dict(:prob_choice => 1, :alg=>CVODE_BDF()),
542+ Dict(:prob_choice => 1, :alg=>FBDF ()),
543+ Dict(:prob_choice => 1, :alg=>QNDF ()),
544+ Dict(:prob_choice => 2, :alg=>Rodas5P ()),
550545]
551546
552547for (i, (probs, refs, name)) in enumerate(zip(all_probs, all_refs, system_names))
563558# Create summary comparison of all DAE types
564559plot_array = []
565560for (i, (probs, refs, name)) in enumerate(zip(all_probs, all_refs, system_names))
566- wp = WorkPrecisionSet(probs, abstols, reltols, setups_rlc ;
561+ wp = WorkPrecisionSet(probs, abstols, reltols, all_setups ;
567562 save_everystep=false, appxsol=refs, maxiters=Int(1e5), numruns=10)
568563 p = plot(wp, title=name, legend=false, titlefont=font(10))
569564 push!(plot_array, p)
@@ -579,15 +574,8 @@ plot(plot_array..., layout=(2,3), size=(1500,800))
579574abstols_ts = 1.0 ./ 10.0 .^ (5:8)
580575reltols_ts = 1.0 ./ 10.0 .^ (2:5)
581576
582- ts_setups = [
583- Dict(:prob_choice => 1, :alg=>Rosenbrock23()),
584- Dict(:prob_choice => 1, :alg=>Rodas4()),
585- Dict(:prob_choice => 1, :alg=>CVODE_BDF()),
586- Dict(:prob_choice => 2, :alg=>Rodas5P()),
587- ]
588-
589577for (i, (probs, refs, name)) in enumerate(zip(all_probs, all_refs, system_names))
590- wp = WorkPrecisionSet(probs, abstols_ts, reltols_ts, ts_setups ;
578+ wp = WorkPrecisionSet(probs, abstols_ts, reltols_ts, all_setups ;
591579 error_estimate=:l2, save_everystep=false, appxsol=refs,
592580 maxiters=Int(1e5), numruns=10)
593581 p = plot(wp, title="$name - L2 Timeseries Error")
0 commit comments