|
267 | 267 | # Now uᵢ₋₂ = uₛ₋₂, uᵢ₋₁ = uₛ₋₁, uᵢ = uₛ |
268 | 268 | # Similarly tᵢ₋₂ = tₛ₋₂, tᵢ₋₁ = tₛ₋₁, tᵢ = tₛ |
269 | 269 |
|
270 | | - if (W.dW isa Number) || is_diagonal_noise(integrator.sol.prob) |
| 270 | + if (W.dW isa Number) || is_diagonal_noise(integrator.sol.prob) |
271 | 271 | Gₛ = integrator.f.g(uᵢ₋₁, p, tᵢ₋₁) |
272 | 272 | u += Gₛ .* W.dW |
273 | 273 | Gₛ = integrator.f.g(uᵢ, p, tᵢ) |
|
418 | 418 | # Now uᵢ₋₂ = uₛ₋₂, uᵢ₋₁ = uₛ₋₁, uᵢ = uₛ |
419 | 419 | # Similarly tᵢ₋₂ = tₛ₋₂, tᵢ₋₁ = tₛ₋₁, tᵢ = tₛ |
420 | 420 |
|
421 | | - if (W.dW isa Number) || is_diagonal_noise(integrator.sol.prob) |
| 421 | + if (W.dW isa Number) || is_diagonal_noise(integrator.sol.prob) |
422 | 422 | integrator.f.g(Gₛ, uᵢ₋₁, p, tᵢ₋₁) |
423 | 423 | @.. u += Gₛ * W.dW |
424 | 424 | integrator.f.g(Gₛ, uᵢ, p, tᵢ) |
@@ -542,14 +542,14 @@ end |
542 | 542 | end |
543 | 543 |
|
544 | 544 | Gₛ = integrator.f.g(u, p, tᵢ) |
545 | | - if (W.dW isa Number) || is_diagonal_noise(integrator.sol.prob) |
| 545 | + if (W.dW isa Number) || is_diagonal_noise(integrator.sol.prob) |
546 | 546 | u += Gₛ .* W.dW |
547 | 547 | else |
548 | 548 | u += Gₛ * W.dW |
549 | 549 | end |
550 | 550 |
|
551 | 551 | if integrator.alg.strong_order_1 |
552 | | - if (W.dW isa Number) || |
| 552 | + if (W.dW isa Number) || |
553 | 553 | (is_diagonal_noise(integrator.sol.prob)) |
554 | 554 | uᵢ₋₂ = @. 1 // 2 * Gₛ * (W.dW^2 - abs(dt)) |
555 | 555 | tmp = @. u + uᵢ₋₂ |
@@ -633,15 +633,15 @@ end |
633 | 633 | end |
634 | 634 |
|
635 | 635 | integrator.f.g(Gₛ, u, p, tᵢ) |
636 | | - if (W.dW isa Number) || is_diagonal_noise(integrator.sol.prob) |
| 636 | + if (W.dW isa Number) || is_diagonal_noise(integrator.sol.prob) |
637 | 637 | @.. u += Gₛ * W.dW |
638 | 638 | else |
639 | 639 | mul!(uᵢ₋₁, Gₛ, W.dW) |
640 | 640 | u += uᵢ₋₁ |
641 | 641 | end |
642 | 642 |
|
643 | 643 | if integrator.alg.strong_order_1 |
644 | | - if (W.dW isa Number) || |
| 644 | + if (W.dW isa Number) || |
645 | 645 | (is_diagonal_noise(integrator.sol.prob)) |
646 | 646 | @.. uᵢ₋₂ = 1 // 2 * Gₛ * (W.dW^2 - abs(dt)) |
647 | 647 | @.. tmp = u + uᵢ₋₂ |
@@ -1168,7 +1168,7 @@ end |
1168 | 1168 | end |
1169 | 1169 | end |
1170 | 1170 |
|
1171 | | - if (W.dW isa Number) || is_diagonal_noise(integrator.sol.prob) |
| 1171 | + if (W.dW isa Number) || is_diagonal_noise(integrator.sol.prob) |
1172 | 1172 | integrator.f.g(Gₛ, Û₁, p, t̂₁) |
1173 | 1173 | @.. uₓ += Gₛ * W.dW |
1174 | 1174 |
|
@@ -1291,7 +1291,7 @@ end |
1291 | 1291 | tᵢ₋₁ += θₛ₋₃ * (tᵢ₋₁ - tᵢ₋₂) |
1292 | 1292 | tᵢ₋₂ = ttmp |
1293 | 1293 |
|
1294 | | - if W.dW isa Number || is_diagonal_noise(integrator.sol.prob) |
| 1294 | + if W.dW isa Number || is_diagonal_noise(integrator.sol.prob) |
1295 | 1295 | # stage s-3 |
1296 | 1296 | yₛ₋₃ = integrator.f(uᵢ₋₁, p, tᵢ₋₁) |
1297 | 1297 | utmp = uᵢ₋₁ + μₛ₋₃ * yₛ₋₃ |
@@ -1460,7 +1460,9 @@ end |
1460 | 1460 | τ = mτ[deg_index] |
1461 | 1461 |
|
1462 | 1462 | sqrt_dt = sqrt(abs(dt)) |
1463 | | - if gen_prob; init_χ!(vec_χ, W); end |
| 1463 | + if gen_prob |
| 1464 | + init_χ!(vec_χ, W) |
| 1465 | + end |
1464 | 1466 |
|
1465 | 1467 | tᵢ₋₂ = t |
1466 | 1468 | @.. uᵢ₋₂ = uprev |
@@ -1503,7 +1505,7 @@ end |
1503 | 1505 | tᵢ₋₁ += θₛ₋₃ * (tᵢ₋₁ - tᵢ₋₂) |
1504 | 1506 | tᵢ₋₂ = ttmp |
1505 | 1507 |
|
1506 | | - if W.dW isa Number || is_diagonal_noise(integrator.sol.prob) |
| 1508 | + if W.dW isa Number || is_diagonal_noise(integrator.sol.prob) |
1507 | 1509 | # stage s-3 |
1508 | 1510 | integrator.f(yₛ₋₃, uᵢ₋₁, p, tᵢ₋₁) |
1509 | 1511 | @.. utmp = uᵢ₋₁ + μₛ₋₃ * yₛ₋₃ |
@@ -1714,7 +1716,7 @@ end |
1714 | 1716 | uᵢ₋₂ = integrator.f(uᵢ₋₂, p, tᵢ₋₂) |
1715 | 1717 | u += dt * (σ + τ) * uᵢ₋₂ |
1716 | 1718 |
|
1717 | | - if (W.dW isa Number) || is_diagonal_noise(integrator.sol.prob) |
| 1719 | + if (W.dW isa Number) || is_diagonal_noise(integrator.sol.prob) |
1718 | 1720 | Gₛ = integrator.f.g(uᵢ₋₁, p, tᵢ₋₁) |
1719 | 1721 | u += Gₛ .* W.dW |
1720 | 1722 |
|
@@ -1809,7 +1811,7 @@ end |
1809 | 1811 | integrator.f(k, uᵢ₋₂, p, tᵢ₋₂) |
1810 | 1812 | @.. u += dt * (σ + τ) * k |
1811 | 1813 |
|
1812 | | - if (W.dW isa Number) || is_diagonal_noise(integrator.sol.prob) |
| 1814 | + if (W.dW isa Number) || is_diagonal_noise(integrator.sol.prob) |
1813 | 1815 | integrator.f.g(Gₛ, uᵢ₋₁, p, tᵢ₋₁) |
1814 | 1816 | @.. u += Gₛ * W.dW |
1815 | 1817 |
|
@@ -1845,9 +1847,10 @@ end |
1845 | 1847 | end |
1846 | 1848 |
|
1847 | 1849 | function init_χ!(vec_χ, W) |
1848 | | - rand!(rng(W), vec_χ) |
1849 | | - @.. vec_χ = 2 * floor(vec_χ + 1 // 2) - 1 |
| 1850 | + r = rng(W) |
| 1851 | + for i in eachindex(vec_χ) |
| 1852 | + vec_χ[i] = 2 * floor(rand(r) + 0.5) - 1 |
| 1853 | + end |
1850 | 1854 | end |
1851 | 1855 |
|
1852 | | -rng(W::DiffEqNoiseProcess.AbstractNoiseProcess) = W.rng |
1853 | | -rng(W::DiffEqNoiseProcess.NoiseWrapper) = W.source.rng |
| 1856 | +rng(W) = hasfield(typeof(W), :rng) ? W.rng : W.source.rng |
0 commit comments