|
3 | 3 |
|
4 | 4 | alg = unwrap_alg(integrator, true)
|
5 | 5 | alg.eigen_est === nothing ? maxeig!(integrator, cache) : alg.eigen_est(integrator)
|
6 |
| - cache.mdeg = Int(floor(sqrt(2*dt*integrator.opts.internalnorm(integrator.eigen_est,t))+1)) # this is the spectral radius estimate to choose optimal stage |
| 6 | + cache.mdeg = Int(floor(sqrt(2*abs(dt)*integrator.opts.internalnorm(integrator.eigen_est,t))+1)) # this is the spectral radius estimate to choose optimal stage |
7 | 7 | choose_deg!(integrator,cache)
|
8 | 8 |
|
9 | 9 | mdeg = cache.mdeg
|
|
61 | 61 | elseif (i == mdeg) && alg_interpretation(integrator.alg) == :Ito
|
62 | 62 | if typeof(W.dW) <: Number
|
63 | 63 | gₘ₋₂ = integrator.g(uᵢ₋₁,p,tᵢ₋₁)
|
64 |
| - uᵢ₋₂ = uᵢ₋₁ + sqrt(dt)*gₘ₋₂ |
| 64 | + uᵢ₋₂ = uᵢ₋₁ + sqrt(abs(dt))*gₘ₋₂ |
65 | 65 | gₘ₋₁ = integrator.g(uᵢ₋₂,p,tᵢ₋₁)
|
66 |
| - u += gₘ₋₂*W.dW + 1/(2*sqrt(dt))*(gₘ₋₁ - gₘ₋₂)*(W.dW^2 - dt) |
| 66 | + u += gₘ₋₂*W.dW + 1/(2*sqrt(abs(dt)))*(gₘ₋₁ - gₘ₋₂)*(W.dW^2 - abs(dt)) |
67 | 67 | elseif is_diagonal_noise(integrator.sol.prob)
|
68 | 68 | gₘ₋₂ = integrator.g(uᵢ₋₁,p,tᵢ₋₁)
|
69 |
| - uᵢ₋₂ .= uᵢ₋₁ .+ sqrt(dt) .* gₘ₋₂ |
| 69 | + uᵢ₋₂ .= uᵢ₋₁ .+ sqrt(abs(dt)) .* gₘ₋₂ |
70 | 70 | gₘ₋₁ = integrator.g(uᵢ₋₂,p,tᵢ₋₁)
|
71 |
| - u .+= gₘ₋₂ .* W.dW .+ (1/(2*sqrt(dt))) .* (gₘ₋₁ .- gₘ₋₂) .* (W.dW .^ 2 .- dt) |
| 71 | + u .+= gₘ₋₂ .* W.dW .+ (1/(2*sqrt(abs(dt)))) .* (gₘ₋₁ .- gₘ₋₂) .* (W.dW .^ 2 .- abs(dt)) |
72 | 72 | else
|
73 | 73 | gₘ₋₂ = integrator.g(uᵢ₋₁,p,tᵢ₋₁)
|
74 | 74 | u += gₘ₋₂*W.dW
|
|
94 | 94 | ccache = cache.constantcache
|
95 | 95 | alg = unwrap_alg(integrator, true)
|
96 | 96 | alg.eigen_est === nothing ? maxeig!(integrator, cache) : alg.eigen_est(integrator)
|
97 |
| - ccache.mdeg = Int(floor(sqrt(2*dt*integrator.opts.internalnorm(integrator.eigen_est,t))+1)) # this is the spectral radius estimate to choose optimal stage |
| 97 | + ccache.mdeg = Int(floor(sqrt(2*abs(dt)*integrator.opts.internalnorm(integrator.eigen_est,t))+1)) # this is the spectral radius estimate to choose optimal stage |
98 | 98 | choose_deg!(integrator,cache)
|
99 | 99 |
|
100 | 100 | mdeg = ccache.mdeg
|
|
155 | 155 | elseif (i == mdeg) && alg_interpretation(integrator.alg) == :Ito
|
156 | 156 | if typeof(W.dW) <: Number || is_diagonal_noise(integrator.sol.prob)
|
157 | 157 | integrator.g(gₘ₋₂,uᵢ₋₁,p,tᵢ₋₁)
|
158 |
| - @.. uᵢ₋₂ = uᵢ₋₁ + sqrt(dt)*gₘ₋₂ |
| 158 | + @.. uᵢ₋₂ = uᵢ₋₁ + sqrt(abs(dt))*gₘ₋₂ |
159 | 159 | integrator.g(gₘ₋₁,uᵢ₋₂,p,tᵢ₋₁)
|
160 |
| - @.. u += gₘ₋₂*W.dW + 1/(2*sqrt(dt))*(gₘ₋₁ - gₘ₋₂)*(W.dW^2 - dt) |
| 160 | + @.. u += gₘ₋₂*W.dW + 1/(2*sqrt(abs(dt)))*(gₘ₋₁ - gₘ₋₂)*(W.dW^2 - abs(dt)) |
161 | 161 | else
|
162 | 162 | integrator.g(gₘ₋₂,uᵢ₋₁,p,tᵢ₋₁)
|
163 | 163 | mul!(uᵢ₋₁,gₘ₋₂,W.dW)
|
|
187 | 187 |
|
188 | 188 | alg = unwrap_alg(integrator, true)
|
189 | 189 | alg.eigen_est === nothing ? maxeig!(integrator, cache) : alg.eigen_est(integrator)
|
190 |
| - cache.mdeg = Int(floor(sqrt((2*dt*integrator.opts.internalnorm(integrator.eigen_est,t)+1.5)/0.811)+1)) |
| 190 | + cache.mdeg = Int(floor(sqrt((2*abs(dt)*integrator.opts.internalnorm(integrator.eigen_est,t)+1.5)/0.811)+1)) |
191 | 191 | cache.mdeg = max(3,min(cache.mdeg,200))-2
|
192 | 192 | choose_deg!(integrator,cache)
|
193 | 193 |
|
|
319 | 319 |
|
320 | 320 | alg = unwrap_alg(integrator, true)
|
321 | 321 | alg.eigen_est === nothing ? maxeig!(integrator, cache) : alg.eigen_est(integrator)
|
322 |
| - ccache.mdeg = Int(floor(sqrt((2*dt*integrator.opts.internalnorm(integrator.eigen_est,t)+1.5)/0.811)+1)) |
| 322 | + ccache.mdeg = Int(floor(sqrt((2*abs(dt)*integrator.opts.internalnorm(integrator.eigen_est,t)+1.5)/0.811)+1)) |
323 | 323 | ccache.mdeg = max(3,min(ccache.mdeg,200))-2
|
324 | 324 | choose_deg!(integrator,cache)
|
325 | 325 |
|
|
461 | 461 | alg = unwrap_alg(integrator, true)
|
462 | 462 | alg.eigen_est === nothing ? maxeig!(integrator, cache) : alg.eigen_est(integrator)
|
463 | 463 | if integrator.alg.strong_order_1
|
464 |
| - cache.mdeg = Int(floor(sqrt(dt*integrator.opts.internalnorm(integrator.eigen_est,t)/0.19)+1)) |
| 464 | + cache.mdeg = Int(floor(sqrt(abs(dt)*integrator.opts.internalnorm(integrator.eigen_est,t)/0.19)+1)) |
465 | 465 | else
|
466 |
| - cache.mdeg = Int(floor(sqrt(dt*integrator.opts.internalnorm(integrator.eigen_est,t)/0.33)+1)) |
| 466 | + cache.mdeg = Int(floor(sqrt(abs(dt)*integrator.opts.internalnorm(integrator.eigen_est,t)/0.33)+1)) |
467 | 467 | end
|
468 | 468 | cache.mdeg = max(3,min(cache.mdeg,200))
|
469 | 469 | choose_deg!(integrator,cache)
|
|
552 | 552 | alg = unwrap_alg(integrator, true)
|
553 | 553 | alg.eigen_est === nothing ? maxeig!(integrator, cache) : alg.eigen_est(integrator)
|
554 | 554 | if integrator.alg.strong_order_1
|
555 |
| - ccache.mdeg = Int(floor(sqrt(dt*integrator.opts.internalnorm(integrator.eigen_est,t)/0.19)+1)) |
| 555 | + ccache.mdeg = Int(floor(sqrt(abs(dt)*integrator.opts.internalnorm(integrator.eigen_est,t)/0.19)+1)) |
556 | 556 | else
|
557 |
| - ccache.mdeg = Int(floor(sqrt(dt*integrator.opts.internalnorm(integrator.eigen_est,t)/0.33)+1)) |
| 557 | + ccache.mdeg = Int(floor(sqrt(abs(dt)*integrator.opts.internalnorm(integrator.eigen_est,t)/0.33)+1)) |
558 | 558 | end
|
559 | 559 | ccache.mdeg = max(3,min(ccache.mdeg,200))
|
560 | 560 | choose_deg!(integrator,cache)
|
|
643 | 643 | alg = unwrap_alg(integrator, true)
|
644 | 644 | alg.eigen_est === nothing ? maxeig!(integrator, cache) : alg.eigen_est(integrator)
|
645 | 645 | η = oftype(t,0.05)
|
646 |
| - mdeg = Int(floor(sqrt((dt*integrator.opts.internalnorm(integrator.eigen_est,t) + 1.5)/(2-η*4/3))+1)) |
| 646 | + mdeg = Int(floor(sqrt((abs(dt)*integrator.opts.internalnorm(integrator.eigen_est,t) + 1.5)/(2-η*4/3))+1)) |
647 | 647 | mdeg = max(3,min(mdeg,200))
|
648 | 648 |
|
649 | 649 | ω₀ = 1 + (η/(mdeg^2))
|
|
729 | 729 | alg = unwrap_alg(integrator, true)
|
730 | 730 | alg.eigen_est === nothing ? maxeig!(integrator, cache) : alg.eigen_est(integrator)
|
731 | 731 | η = oftype(t,0.05)
|
732 |
| - mdeg = Int(floor(sqrt((dt*integrator.opts.internalnorm(integrator.eigen_est,t) + 1.5)/(2-η*4/3))+1)) |
| 732 | + mdeg = Int(floor(sqrt((abs(dt)*integrator.opts.internalnorm(integrator.eigen_est,t) + 1.5)/(2-η*4/3))+1)) |
733 | 733 | mdeg = max(3,min(mdeg,200))
|
734 | 734 |
|
735 | 735 | ω₀ = 1 + (η/(mdeg^2))
|
|
819 | 819 |
|
820 | 820 | alg = unwrap_alg(integrator, true)
|
821 | 821 | alg.eigen_est === nothing ? maxeig!(integrator, cache) : alg.eigen_est(integrator)
|
822 |
| - (integrator.alg.version_num <= 2) && (cache.mdeg = Int(floor(sqrt((dt*integrator.opts.internalnorm(integrator.eigen_est,t)+1.5)/0.811)+1))) |
823 |
| - (integrator.alg.version_num > 2) && (cache.mdeg = Int(floor(sqrt((dt*integrator.opts.internalnorm(integrator.eigen_est,t)+1.5)/0.611)+1))) |
| 822 | + (integrator.alg.version_num <= 2) && (cache.mdeg = Int(floor(sqrt((abs(dt)*integrator.opts.internalnorm(integrator.eigen_est,t)+1.5)/0.811)+1))) |
| 823 | + (integrator.alg.version_num > 2) && (cache.mdeg = Int(floor(sqrt((abs(dt)*integrator.opts.internalnorm(integrator.eigen_est,t)+1.5)/0.611)+1))) |
824 | 824 |
|
825 | 825 | cache.mdeg = max(4,min(cache.mdeg,200))-2
|
826 | 826 | choose_deg!(integrator,cache)
|
|
974 | 974 |
|
975 | 975 | alg = unwrap_alg(integrator, true)
|
976 | 976 | alg.eigen_est === nothing ? maxeig!(integrator, cache) : alg.eigen_est(integrator)
|
977 |
| - (integrator.alg.version_num <= 2) && (ccache.mdeg = Int(floor(sqrt((dt*integrator.opts.internalnorm(integrator.eigen_est,t)+1.5)/0.811)+1))) |
978 |
| - (integrator.alg.version_num > 2) && (ccache.mdeg = Int(floor(sqrt((dt*integrator.opts.internalnorm(integrator.eigen_est,t)+1.5)/0.611)+1))) |
| 977 | + (integrator.alg.version_num <= 2) && (ccache.mdeg = Int(floor(sqrt((abs(dt)*integrator.opts.internalnorm(integrator.eigen_est,t)+1.5)/0.811)+1))) |
| 978 | + (integrator.alg.version_num > 2) && (ccache.mdeg = Int(floor(sqrt((abs(dt)*integrator.opts.internalnorm(integrator.eigen_est,t)+1.5)/0.611)+1))) |
979 | 979 | ccache.mdeg = max(4,min(ccache.mdeg,200))-2
|
980 | 980 | choose_deg!(integrator,cache)
|
981 | 981 |
|
@@ -1109,7 +1109,7 @@ end
|
1109 | 1109 |
|
1110 | 1110 | alg = unwrap_alg(integrator, true)
|
1111 | 1111 | alg.eigen_est === nothing ? maxeig!(integrator, cache) : alg.eigen_est(integrator)
|
1112 |
| - cache.mdeg = Int(floor(sqrt((2*dt*integrator.opts.internalnorm(integrator.eigen_est,t)+1.5)/0.811)+1)) |
| 1112 | + cache.mdeg = Int(floor(sqrt((2*abs(dt)*integrator.opts.internalnorm(integrator.eigen_est,t)+1.5)/0.811)+1)) |
1113 | 1113 | cache.mdeg = max(6,min(cache.mdeg,200))-2
|
1114 | 1114 | choose_deg!(integrator,cache)
|
1115 | 1115 |
|
@@ -1298,7 +1298,7 @@ end
|
1298 | 1298 |
|
1299 | 1299 | alg = unwrap_alg(integrator, true)
|
1300 | 1300 | alg.eigen_est === nothing ? maxeig!(integrator, cache) : alg.eigen_est(integrator)
|
1301 |
| - ccache.mdeg = Int(floor(sqrt((2*dt*integrator.opts.internalnorm(integrator.eigen_est,t)+1.5)/0.811)+1)) |
| 1301 | + ccache.mdeg = Int(floor(sqrt((2*abs(dt)*integrator.opts.internalnorm(integrator.eigen_est,t)+1.5)/0.811)+1)) |
1302 | 1302 | ccache.mdeg = max(6,min(ccache.mdeg,200))-2
|
1303 | 1303 | choose_deg!(integrator,cache)
|
1304 | 1304 |
|
@@ -1511,7 +1511,7 @@ end
|
1511 | 1511 |
|
1512 | 1512 | alg = unwrap_alg(integrator, true)
|
1513 | 1513 | alg.eigen_est === nothing ? maxeig!(integrator, cache) : alg.eigen_est(integrator)
|
1514 |
| - cache.mdeg = Int(floor(sqrt((2*dt*integrator.opts.internalnorm(integrator.eigen_est,t)+1.5)/0.811)+1)) |
| 1514 | + cache.mdeg = Int(floor(sqrt((2*abs(dt)*integrator.opts.internalnorm(integrator.eigen_est,t)+1.5)/0.811)+1)) |
1515 | 1515 | cache.mdeg = max(3,min(cache.mdeg,200))-2
|
1516 | 1516 | choose_deg!(integrator,cache)
|
1517 | 1517 |
|
@@ -1597,7 +1597,7 @@ end
|
1597 | 1597 |
|
1598 | 1598 | alg = unwrap_alg(integrator, true)
|
1599 | 1599 | alg.eigen_est === nothing ? maxeig!(integrator, cache) : alg.eigen_est(integrator)
|
1600 |
| - ccache.mdeg = Int(floor(sqrt((2*dt*integrator.opts.internalnorm(integrator.eigen_est,t)+1.5)/0.811)+1)) |
| 1600 | + ccache.mdeg = Int(floor(sqrt((2*abs(dt)*integrator.opts.internalnorm(integrator.eigen_est,t)+1.5)/0.811)+1)) |
1601 | 1601 | ccache.mdeg = max(3,min(ccache.mdeg,200))-2
|
1602 | 1602 | choose_deg!(integrator,cache)
|
1603 | 1603 |
|
|
0 commit comments