@@ -16,22 +16,49 @@ const z0 = NPZ.npzread(joinpath(data_dir, "ic.npy"))
16
16
const Yk_test = NPZ. npzread (joinpath (data_dir, " Yk.npy" ))
17
17
const full_test = NPZ. npzread (joinpath (data_dir, " full.npy" ))
18
18
const balanced_test = NPZ. npzread (joinpath (data_dir, " balanced.npy" ))
19
+ const regressed_test = NPZ. npzread (joinpath (data_dir, " regressed.npy" ))
19
20
const dp5_test = NPZ. npzread (joinpath (data_dir, " dp5_full.npy" ))
20
21
const tp8_test = NPZ. npzread (joinpath (data_dir, " tsitpap8_full.npy" ))
21
22
const bal_test = NPZ. npzread (joinpath (data_dir, " dp5_bal.npy" ))
22
23
23
24
# ###############################################################################
24
25
# unit testing #################################################################
25
26
# ###############################################################################
26
- Yk_comp = compute_Yk (l96, z0)
27
- full_comp = similar (z0)
28
- full (full_comp, z0, l96, 0.0 )
29
- balanced_comp = similar (z0[1 : l96. K])
30
- balanced (balanced_comp, z0[1 : l96. K], l96, 0.0 )
31
27
@testset " unit testing" begin
28
+ Yk_comp = compute_Yk (l96, z0)
32
29
@test isapprox (Yk_test, Yk_comp, atol= 1e-15 )
30
+
31
+ full_comp = similar (z0)
32
+ full (full_comp, z0, l96, 0.0 )
33
33
@test isapprox (full_test, full_comp, atol= 1e-15 )
34
+
35
+ balanced_comp = similar (z0[1 : l96. K])
36
+ balanced (balanced_comp, z0[1 : l96. K], l96, 0.0 )
34
37
@test isapprox (balanced_test, balanced_comp, atol= 1e-15 )
38
+
39
+ set_G0 (l96)
40
+ regressed_comp = similar (z0[1 : l96. K])
41
+ regressed (regressed_comp, z0[1 : l96. K], l96, 0.0 )
42
+ @test isapprox (balanced_test, regressed_comp, atol= 1e-13 )
43
+ set_G0 (l96, slope = - 0.7 )
44
+ regressed (regressed_comp, z0[1 : l96. K], l96, 0.0 )
45
+ @test isapprox (regressed_test, regressed_comp, atol= 1e-15 )
46
+
47
+ @testset " G0 testing" begin
48
+ v1 = Vector (1.0 : 20.0 )
49
+ v2 = Vector (1 : 3 : 21 )
50
+ set_G0 (l96)
51
+ @test l96. hy * 5.0 == l96. G (5.0 )
52
+ @test l96. hy * v1 == l96. G (v1)
53
+ @test l96. hy * v2 == l96. G (v2)
54
+ set_G0 (l96, 1.0 )
55
+ @test 5.0 == l96. G (5.0 )
56
+ @test v1 == l96. G (v1)
57
+ @test v2 == l96. G (v2)
58
+ set_G0 (l96, slope = - 0.5 )
59
+ @test - 0.5 * v1 == l96. G (v1)
60
+ @test - 0.5 * v2 == l96. G (v2)
61
+ end
35
62
end
36
63
println (" " )
37
64
@@ -43,6 +70,7 @@ const dtmax = 1e-5
43
70
const saveat = 1e-2
44
71
pb_full = DE. ODEProblem (full, z0, (0.0 , T), l96)
45
72
pb_bal = DE. ODEProblem (balanced, z0[1 : l96. K], (0.0 , T), l96)
73
+ pb_reg = DE. ODEProblem (regressed, z0[1 : l96. K], (0.0 , T), l96)
46
74
47
75
# full, DP5
48
76
print (rpad (" (full, DP5)" , RPAD))
68
96
println (" steps:" , lpad (length (sol_bal. t), LPAD_INTEGER),
69
97
" \t elapsed:" , lpad (elapsed_bal, LPAD_FLOAT))
70
98
99
+ # regressed, DP5
100
+ set_G0 (l96) # this has a side effect on `pb_reg` through `l96` object
101
+ print (rpad (" (regressed, DP5)" , RPAD))
102
+ elapsed_reg = @elapsed begin
103
+ sol_reg = DE. solve (pb_reg, DE. DP5 (), dtmax = dtmax, saveat = saveat)
104
+ end
105
+ println (" steps:" , lpad (length (sol_reg. t), LPAD_INTEGER),
106
+ " \t elapsed:" , lpad (elapsed_reg, LPAD_FLOAT))
107
+
71
108
@testset " integration testing" begin
72
109
@test isapprox (sol_dp5[:,1 : end ], dp5_test, atol= 1e-3 )
73
110
@test isapprox (sol_tp8[:,1 : end ], tp8_test, atol= 1e-3 )
74
111
@test isapprox (sol_bal[:,1 : end ], bal_test, atol= 1e-5 )
112
+ @test isapprox (sol_reg[:,1 : end ], bal_test, atol= 1e-5 ) # reg + G0 == bal
75
113
end
76
114
println (" " )
77
115
0 commit comments