Skip to content

Commit 60c26b9

Browse files
get something running
1 parent 097276b commit 60c26b9

File tree

1 file changed

+24
-36
lines changed

1 file changed

+24
-36
lines changed

benchmarks/DAE/LinearDAE.jmd

Lines changed: 24 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,6 @@ rlc_eqs = E_rlc * Dx ~ A_rlc * x + B_rlc .* u(t)
7979
# Problems using constant voltage input
8080
rlc_prob = ODEProblem(rlc_sys, [i_R => 0.0, v_C => 0.0], (0.0, 1e-3))
8181
rlc_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
125124
masses_prob = ODEProblem(masses_sys, [], (0.0, 1.0))
126125
masses_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
166164
rl_prob = ODEProblem(rl_sys, [v_L => 1.0], (0.0, 1.0))
167165
rl_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
216213
cart_prob = ODEProblem(cart_sys, [dy_cart => 0.0, y_cart => 0.0], (0.0, 1.0))
217214
cart_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
259255
gen_prob = ODEProblem(gen_sys, [ω_gen => 1.0], (0.0, 1.0))
260256
gen_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
332327
rlc_ref = solve(rlc_prob, Rodas5P(), abstol=abstol_ref, reltol=reltol_ref)
333328
rlc_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

336330
masses_ref = solve(masses_prob, Rodas5P(), abstol=abstol_ref, reltol=reltol_ref)
337331
masses_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
403397
setups_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
421415
setups_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+
#=
439434
setups_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 = [
449444
wp_rl = WorkPrecisionSet(all_probs[3], abstols, reltols, setups_rl;
450445
save_everystep=false, appxsol=all_refs[3], maxiters=Int(1e5), numruns=10)
451446
plot(wp_rl, title="RL Network (Index-2) Work-Precision")
447+
=#
452448
```
453449

454450
### Index-3 DAE: Cart Pendulum
455451

456452
```julia
457453
setups_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
475471
setups_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
493489
setups_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")
511507
abstols_low = 1.0 ./ 10.0 .^ (7:12)
512508
reltols_low = 1.0 ./ 10.0 .^ (4:9)
513509

514-
# Combined analysis for all systems with DASSL and DASKR where available
515510
all_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
543538
high_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

552547
for (i, (probs, refs, name)) in enumerate(zip(all_probs, all_refs, system_names))
@@ -563,7 +558,7 @@ end
563558
# Create summary comparison of all DAE types
564559
plot_array = []
565560
for (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))
579574
abstols_ts = 1.0 ./ 10.0 .^ (5:8)
580575
reltols_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-
589577
for (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

Comments
 (0)